目的
学习一些基本的 mysql 知识
预备
安装 mysql
安装教程地址
终端准备
我这里使用的是cmder,并且设置为管理员模式,加上右键快捷打开,挺方便的。

在准备工作完成之后,正式开始学习。
基础命令
1 2 3
| // 启动mysql(如果出现错误应该以**管理员模式**运行终端,mysql80lzk为我安装的时候的**服务名**) net start mysql80lzk net stop mysql80lzk // 停止mysql
|

1
| mysql -h 127.0.0.1 -P 3306 -uroot -p123456 // 安装的时候设置的(-u)账号(-p)密码
|


1 2 3 4
| use mysql;// 选择数据库 show tables; // 或者 show tables from mysql;
|

1
| DESC user; // user 是表结构中显示的
|
数据完整性
为了实现数据完整性,需要检验数据库表中的每行和每列数据是否符合要求。在创建表的时候,应该保证以后的数据输入是正确的,错误的数据不允许输入。
数据类型

Mysql 列类型
默认值
用户没有指定值得情况下提供一个预先设定的值
非空约束
指定某个字段不能不输入,必须提供一个非空的值。
实体完整性
主键约束
- 表中一列或者几列组合的值能用来唯一标识表中的每一行,这样的列或者列组合称为表的主键,主键表的数据不同重复。
- 如果两列或者多列组合起来唯一标识表中的每一行,则该主键又称为”组合键”
主键选择标准
1.最少性 尽量选择单个建为主键
2.稳定性,更新频率少,稳定
外键
成绩表中的学生 ID 应该在学生表中是存在的,我们应该让成绩表中的 ID 只能引用学生表中的 ID,它们的值应该是一一对应的。也就是说成绩表中的 ID 是成绩表中的外键,对应学生表的主键,这样就可以保证数据的引用完整性。
即:一个表的外键引用了其他表的主键
唯一约束
唯一约束是指某个字段值是唯一的,在所有的记录中不能有重复的值。比如身份证号。
标识列
- 当表中没有合适的列作为主键时可以考虑增加标识列,标识列是一个无实际业务含义的列,仅仅用来区分每条记录。
- 标识列的值是自动生成的,不能在该列上输入数据
外键约束
一个表的外键引用了其他表的主键。比如成绩表中的学生 ID 会引用学生表的主键,课程 ID 会引用成绩表的主键。
- 主表没有记录,子表中不能添加相应的记录
- 修改和删除主表记录不能让子表记录孤立,必须相应修改和删除
数据操作
创建学生表
1 2 3 4 5 6
| CREATE TABLE `student` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT , `name` varchar(50) NOT NULL , `age` int(11) NULL DEFAULT NULL , `city` varchar(50) DEFAULT '北京' );
|
增加身份证字段
1 2 3 4
| // 在city后面增加一个字段, ALTER TABLE `student` ADD COLUMN `idcard` varchar(15) NULL AFTER `city`; // 修改一个字段为carchar(18) ALTER TABLE `student` MODIFY COLUMN `idcard` varchar(18) DEFAULT NULL;
|

1 2
| // 删除身份证字段 ALTER TABLE `student`DROP COLUMN `idcard`;
|

添加约束
1 2 3 4 5 6
| ALTER TABLE `student` ADD PRIMARY KEY (`id`);
ALTER TABLE `student` ADD UNIQUE INDEX `uq_idcard` (`idcard`) ;
ALTER TABLE `student` MODIFY COLUMN `city` varchar(50) DEFAULT '北京';
|
准备数据
创建数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 创建学生表,如果前面没创建可以创建 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `idcard` varchar(18) DEFAULT NULL, `age` int(11) DEFAULT NULL, `city` varchar(50) DEFAULT '', PRIMARY KEY (`id`) );
CREATE TABLE `course` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) );
|