一、数据库操作
①、创建CREATE DATABASE t1;
CREATE DATABASE IF NOT EXISTS t1;
CREATE DATABASE t2 CHARACTER SET gbk;
②、更新ALTER DATABASE t2 CHARACTER SET utf8;
③、查看SHOW CREATE DATABASE t2;
SHOW DATABASES;
④、删除DROP DATABASE t1;
二、数据类型
①、定义
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
②、整形
③、数据类型之浮点型
④、数据类型之日期时间型
⑤、数据类型之字符型
⑥、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 个字节去存储数据大小。
三、创建数据库
①、创建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_binutf8_general_cs:区分大小写(cs:case sensitiveci 大小写敏感)
utf8_general_ci:不区分大小写,校对快、准确度差(ci:case insenstive 大小写不敏感)
utf8_unicode_ci:不区分大小写,校对慢、准确度高
utf8_bin:区分大小写,可存储二进制内容
四、表级约束与列级约束
①、定义对一个数据列建立的约束,称为列级约束.对多个数据列建立的约束,称为表级约束
列级约束既可以在列定义时声明,也可以在列定义后声明
表级约束只能在列定义后声明
②、进一步解释NOT NULL、DEFAULT只有列级约束
PRIMARY KEY 、UNIQUE KEY、UNIQUE KEY有表级和列级约束
CHECK检测约束不起作用,mysql手册里写的很清楚:“所有的存储引擎均对CHECK子句进行分析,但是忽略CHECK子句。”
五、修改数据表
①、添加/删除列ALTER TABLE users1 ADD aQe TINYINT UNSIGNED NOT NULL DEFAULT 10 AFTER username:ALTER TABLE users1 DROP age;
ALTER TABLE users1 DROP hobby,DROP password;
删除一列的同时在新增一列也是可以的!只需要用都逗号间隔
②、添加约束ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY (id); //添加主键约束
ALTER TABLE users2 ADD UNIQUE KEY (username); //添加唯一约束
ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCES provinces (id); //添加外键约束
ALTER TABLE users2 ALTER age SET DEFAULT 15; //添加默认约束
③、删除约束ALTER TABLE users2 DROP PRIMARY KEY; //删除主键约束
ALTER TABLE users2 DROP INDEX username; //删除唯一约束
ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1; //删除外键约束
ALTER TABLE users2 ALTER age DROP DEFAULT; //删除默认约束
④、修改列定义和更名数据表ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST; //修改列的定义
ALTER TABLE users2 RENAME users3; //修改列名称
RENAME TABLE users3 TO users2; //数据表更名