①、创建
USE test;
SELECT DATABASE();
SHOW TABLES;
SHOW TABLES FROM mysq1;
CREATE TABLE tb1(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY DEFAULT '',
age TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED NULL
)ENGINE=InnoDB;
SHOW COLUMNS FROM tb1; //查看数据表结构
②、约束
唯一约束:UNIQUE KEY,唯一约束可以保证记录的唯一性、唯一约束的字段可以为空值(NULL)、每张数据表可以存在多个唯一约束
默认约束:DEFAULT
主键约束:PRIMARY KEY
非空约束:NOT NULL
外键约束:FOREIGN KEY,1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。2.数据表的存储引擎只能为InnoDB。3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
CREATE TABLE provinces(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20) NOT NULL
);
CREATE ABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(10)NOT NULL,
FOREIGN KEY(pid)REFERENCES provinces (id) ON DELETE CASCADE
);
SHOW INDEXES FROM provinces \G;
1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
3.RESTRICT:拒绝对父表的删除或更新操作。
4.NOACTION:标准SQL的关键字,在MySQL中与RESTRICT相同
③、utf8_general_ci/cs、utf8_unicode_ci、utf8_bin
utf8_general_cs:区分大小写(cs:case sensitiveci 大小写敏感)
utf8_general_ci:不区分大小写,校对快、准确度差(ci:case insenstive 大小写不敏感)
utf8_unicode_ci:不区分大小写,校对慢、准确度高
utf8_bin:区分大小写,可存储二进制内容
④、mysql 中 char、varchar、text 的区别
A、char的总结:
char 最大长度是 255 字符,注意是字符数和字符集没关系。可以有默认值,尾部有空格会被截断。
B、varchar的总结:
varchar 的最大长度 65535 是指能存储的字节数,其实最多只能存储 65532 个字节,还有 3 个字节用于存储长度。
注意是字节数这个和字符集有关系。一个汉字字符用 utf8 占用 3 字节,用 gbk 占用 2 字节。可以有默认值,尾部有空格不会截断。
C、text的总结:
text 和 varchar 基本相同。text 会忽略指定的大小这和 varchar 有所不同,text 不能有默认值。尾部有空格不会被截断。
text 使用额外的 2 个字节来存储数据的大小,varchar 根据存储数据的大小选择用几个字节来存储。
text 的 65535 字节全部用来存储数据,varchar 则会占用 1-3 个字节去存储数据大小。