day2(数据库SQL)
标准SQL语句分类
1、DDL:Data Define Language 定义数据结构
(CREATE/DROP/ALTER 数据库、表)
2、DML:Data Munipulate Language 操作数据
(INSERT/DELETE/UPDATE)
3、DQL:DATA Quary Language 查询数据
(SELECT)
4、Data Control Language 控制用户权限
(GRANT授权/REVOKE授权)
1、计算机存储字符
(1)如何存储英文字符
ASCII: 总共有128个,对所有的英文字符及标点符号进行了编码。Hello --> 72102108108111
Latin-1 :总共有256个,兼容ASCII码,同事对欧洲符号进行了编码。MySQL默认就使用这种编码。
(2)如何存储中文字符
GB2312: 对常用的6千多汉字进行了编码,兼容ASCII码
GBK:对2万多个汉字进行了编码,兼容GB2312
BIG5:台湾繁体字编码,兼容ASCII
Unicode:对世界上主流的语言常用的字符进行了编码,兼容ASCII,不兼容GBK,GB2312,BIG5等系列。具体分为UTF-8、UTF-16、UTF-32等存储方案。
(3)解决MySQL存储中文乱码
sql脚本文件存储的编码为UTF-8
客户端连接服务器使用的编码为UTF-8
服务器端创建数据库存储使用的编码为UTF-8
#设置客户端连接服务器端使用的编码为UTF-8
SET NAMES UTF8;
#创建数据库,生命存储的编码为UTF8
CREATE DATABASE xz CHARSET=UTF8
2、MySQL中的列类型
创建数据表的时候,指定的列可以存储的数据类型。
CREATE TABLE book(bid 列类型);
(1)数据类型
TINYINT 微整形 占1个字节(范围-128--127)
SMALLINT 小整形 占2个字节(范围-32768--32767)
INT 整形 占4个字节(范围--2147483648--2147473647)
BIGINT 大整形 占8个字节
FLOAT 单精度浮点型,占4个字节,范围比INT大的多。可能产生计算误差。
DOUBLE 双精度浮点型,占8个字节,范围比BIGINT大的多。
DECIMAL(M,D) 定点小数,不会产生计算误差,M代表总的有效位数,D代表小数点后的有效位数、
BOOL 布尔型,只有两个结果TRUE、FALSE
(2)日期时间类型
DATE 日期型:2018-12-31
TIME 时间型:14:22:30
DATETIME 日期时间型:‘2018-12-31 14:22:30’
(3)字符串类型
VARCHAR(M) 变长字符串,不会产生空间浪费,操作速度相对较慢,M最大值是65535
CHAR(M) 定长字符串,可能产生空间浪费,操作速度相对较快,M最大值是255,用于存储手机号码,身份证号码等固定长度的字符。
TEXT(M) 大型变长字符串,最多存2G
3、列约束
MySQL 可以对插入的数据进行特定的验证,只有满足条件才允许插入到数据表中,否则被认为是非法的插入
例如:一个人的性别只能是男或女,一个人的年龄0~100之间。
(1)主键约束——PRIMARY KEY
声明了主键列上的值不能出现重复,表中查询的记录会按照主键由小到大排序——加快查找速度;通常主键添加到编号列中。
注意:一个表中只能有一个主键
(2)唯一约束——UNIQUE
声明了唯一约束的列上不能插入重复的值,允许插入NULL,而且允许插入多个NULL
NULL 表示空,在插入数据时,无法确定要保存的数据。
例如:无法确定员工的姓名、工资。
(3)非空约束——NOT NULL
声明了非空约束的列上不能插入NULL
(4)默认值约束——DEFAULT
可惜使用DEFAULT关键字声明默认值,有两种方式可以应用默认值
INSERT INTO xz_laptop_family VALUES(40,'苹果',DEFAULT)
INSERT INTO xz_laptop_family(fid,fname) VALUES(50,'华硕');
(5)检查约束——CHECK
检查约束可以对插入的数据进行检验
CREATE TABLE student(age TINYINT CHECK(age>=18 AND age<=60));
MySQL不支持检查约束,会降低数据的插入速度。
(6)外键约束——FOREIGN KEY
声明了外键约束的列,取值必须在另一个表的主键列上出现过,列类型要保持一致,取值可以使NULL
FOREIGN KEY(familyId) REFERENCES xz_laptop_family(fid)

浙公网安备 33010602011771号