1. 常用SQL命令
(1) 修改数据
UPDATE user SET upwd = ‘77777’,isOnline = ‘n’ WHERE uid=‘1’;
(2) 删除数据
DELETE FROM user WHERE uid=‘2’;
2计算机如何存储字符
(1) 如何存储英文字符
ASCLL:对128个英文字母及其符号的存储
Latin-1:对256个欧洲字符进行编码,有256个,兼容ASCLL
(2) 如何存储中文字符
GB2312 (GB:国家标准) 对常用的6000多汉子进行了编码,兼容ASCLL
GBK:对两万多汉字进行编码,兼容GB2312
Unicode:对世界上主流国家常用语言进行了编码,兼容ASCLL。不兼容GB2312,GBK 等,具体使用分为 utf-8,utf-16, utf-32
中文乱码原因:Mysql中默认使用Latin-1编码。
(3) 解决myql中文乱码
脚本文件另存为的编码为utf8
客户端链接服务器端的代码为utf-8
Set names utf8;
服务器端创建数据库使用编码为utf-8
Create database xz charset=utf8;
练习:编写脚本文件01.sina.sql 先丢弃在创建数据库sina,设置编码为utf-8 ,进入数据库,创建保存新闻数据的表new, 保护有编号nid, 标题title, 发布时间ctime, 详情detail, 来源origin: 插入若干条数据, 修改1条删除1条
#设置客户端连接服务器端编码
SET NAMES UTF8;
DROP DATABASE IF EXISTS sina;
CREATE DATABASE sina CHARSET=UTF8;
#进入sina这个数据库
USE sina;
#创建news这个表
CREATE TABLE news(
nid INT,
title VARCHAR(10),
ctime VARCHAR(10),
detail VARCHAR(300),
origin VARCHAR(12)
);
#插入数据
INSERT INTO news VALUES('1','中国梦','2020-7-1','新中国未来发展','凤凰网');
INSERT INTO news VALUES('2','中国梦','2020-7-2','新中国未来发展','科技网');
INSERT INTO news VALUES('3','中国梦','2020-7-3','新中国未来发展','科技网');
INSERT INTO news VALUES('4','未知','2020-7-4','未来发展','华尔街网');
INSERT INTO news VALUES('5','华为梦','2020-7-5','华为未来发展趋势','BBC');
#修改数据
UPDATE news SET origin = '军事网', detail='2020发展目标' WHERE nid='1';
#删除数据
DELETE FROM news WHERE nid='3';
#尽量查询在交互使用 select * from news
2.列类型
创建表的时候,指定的列存储的数据类型
Create table t1(id类型)
(1) 数值型 (可以不加引号)
Tinyint 微整型,占1个字节
TB GB MB KB BYTE(字节)
Tinyint 微整型,占1个字节,范围 -128~127
Smallint 小整形,占2个字节, 范围 -32768~32767
Int 整型 范围占4个字节 范围 - 2147483648~ 2147483647
Big 大整型,占8个字节
(2) 浮点型(10的n次方实现左右移动)
12345.6789
123456.789e+
Float:单精度,占4和字节,范围比int大很多,存储的精度不够尤其是数字越大影响越大
Double:双精度 占8和字节
Decimal(M,D):定点小数,小数点不会发什么变化,M代表总的有效位数,D代表小数点后的有效位数。
Boolean/bool 布尔型,只有两个值,分别是true(1) 和 false(0);真正的存储的时候会转为tinyint,也可以存储数字。Mysql没有真正的布尔型。常用于存储只有两个的数据,列如是否在线,是否登陆
(3)日期时间型 (必须加引号)
Data 日期型 2020-10-20
Time 时间型 15:20:30
DateTime 日期时间型 ‘2020-10-20 15:20:30’
(4)字符串型 (必须加引号)
Varchar(M) 变长字符串,几乎不会产生空间浪费,操作速度相对慢,M的最大值65535,常用存储变化长度的数据,列如用户名,密码,文章
Char(M) 定长字符串,可能会产生空间浪费,操作速度相对快,M的最大的值为255常用存储固定长度的数据,例如身份证,手机号
Text(M) 大型变长字符串,M最大值是2G
练习:使用合理的列类型,编写脚本文件02._xuezi.sql ,先丢弃在创建数据库xuezi,设置编码为utf8,进入数据库,创建保存笔记本数据表laptop, 包含编号lid, 标题title,价格price 库存量stockcount 上架时间sheiftime 是否为首页推荐isindex 插入若条数据
#设置客户端链接服务器端编码
SET NAMES UTF8;
#丢弃数据库,如果存在
DROP DATABASE IF EXISTS xuezi;
#创建数据库
CREATE DATABASE xuezi CHARSET=UTF8;
#进入数据库
USE xuezi;
#创建保存数据库笔记本数据的表
CREATE TABLE laptop(
lid INT,
title VARCHAR(128),
price DECIMAL(7,2),
stockcount SMALLINT,
sheiftime DATETIME,
isindex BOOL #可以直接用TINYINT
);
#插入数据
INSERT INTO laptop VALUES('1','麒麟990最新芯片搭载新一代屏幕华为笔记本电脑','85122.29','2525','2020-10-15 15:20:30',FALSE);
INSERT INTO laptop VALUES('1','麒麟990最新芯片搭载新一代屏幕华为笔记本电脑','7522.29','2525','2020-10-15 15:20:30',FALSE);
INSERT INTO laptop VALUES(1,'麒麟990最新芯片搭载新一代屏幕华为笔记本电脑',9522.29,2525,'2020-10-15 15:20:30',TRUE);
INSERT INTO laptop VALUES('1','麒麟990最新芯片搭载新一代屏幕华为笔记本电脑','10522.29','2525','2020-10-15 15:20:30',FALSE);
输出
(5) 列约束
对要插入的数据进行特定的验证,只有符合要求才允许插入,列如插入性别只能是男女,或成绩范围
Create table t1 (lid INT 列约束)
(1) 主键约束 ——— PRIMARY KEY
声明了主键约束的列上不允许插入重复的指,一个表中只能有一个主键约束,通常加在编号列表,加快查找速度
Null 空,代表一个无法确定的值,列如无法确定员工的生日电话等,无法确定价格,是关键字,不能加引号。
主键列上不允许插入null
(2) 非空约束 ——— NOT NULL
声明了非空约束不允许插入NULL。
(3)唯一约束 —— unique
声明了唯一约束的列不允许出现重复的值,允许插入NULL,甚至多个null
一个表允许出现多个唯一约束。
(4)默认值约束 ——default
列(登录视频网站默认非会员)
mysql 可以使用default 关键字默认值,具体应用方式有两种
(1) INSERT INTO laptop VALUES('1','haha');
(2) INSERT INTO laptop(lid,title) VALUES('5',''Apple Ari);
(5) 检查约束 —— CHECK
也称为自定义约束
CHECK TABLE student(
Score TINYINT CHECK (Score>=0 AND Score<=100)
);
MYSQL 不支持检查约束,默认影响数据的插入。队服务器造成较大压力,最终由JS完成
(6) 检查约束 —— CHECK
也称为自定义约束
CHECK TABLE student(
Score TINYINT CHECK (Score>=0 AND Score<=100)
);
MYSQL 不支持检查约束,默认影响数据的插入。队服务器造成较大压力,最终由JS完成
(7) 外键约束 —— foreign key
外键列上的取值范围需要在另一个表的主键列中出现过,外键和对应的主键列的类型一致允许为null
foreign key(列) references另一个表(主键列)
(8) 自增列
auto_increment:自增长,在插入编号时,无需手动赋值。
只需要插入NULL就会过去当前的最大值,然后加1插入。
(注意:
(1)必须加在主键列
(2)必须手动赋值
练习,先丢弃再创建数据库tedu,设置编码UTF8,
创建保存部门数据的表dept,包含部门编号did,部门名称dname(添加唯一约束),插入以下数据
10 研发 20 市场 30 运营 40 测试
创建保存员工数据的表emp,包含有编号eid
姓名ename(非空约束),性别sex(默认值),生日birthday,工资salary,所属部门编号deptId (添加外键约束)
SET NAMES UTF8;
DROP DATABASE IF EXISTS tedu;
CREATE DATABASE tedu CHARSET=UTF8;
USE tedu;
CREATE TABLE dept(
did INT PRIMARY KEY ,
dname VARCHAR(10) UNIQUE
);
INSERT INTO dept VALUES
(10,'研发'),
(20,'市场'),
(30,'运营'),
(40,'测试');
CREATE TABLE emp(
eid int PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(8) NOT NULL,
sex BOOL DEFAULT 0,
birthday DATE,
salary DECIMAL(8,3),
#eid这列作为外键,这一列的取值到dept表did中取
deptid INT,
FOREIGN KEY (deptid) REFERENCES dept(did)
);
INSERT INTO emp VALUES(1,'张飞',DEFAULT,'1999-02-13','95620.32',20);
INSERT INTO emp VALUES(NULL,'豆芽',DEFAULT,'1099-02-13','95620.32',30);
INSERT INTO emp VALUES(NULL,'吃',DEFAULT,'1789-02-13','95620.32',20);
INSERT INTO emp VALUES(NULL,'白马',DEFAULT,'1932-02-13','95620.32',10);