MySQL复习:
创建表
表约束
对数据的增删改查
表关系的实现
查看有哪些数据库:
SHOW DATABASES;
创建数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] dbname;
打开数据库
USE 数据库名称
查看当前数据库中的数据表
SHOW TABLES
查看mysql这个数据库中的数据表
SHOW TABLES FROM 'mysql'
创建数据表
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
)
例:
mysql> CREATE TABLE `tb1`(
-> `id` INT,
-> `name` VARCHAR(20)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql>
查看数据表结构DESCRIBE tb_name;SHOW COLUMNS FROM 'tb_name';
删除数据表
DROP TABLE 'tablename';
表约束
非空约束
唯一约束
主键约束
默认约束
外键约束
例:
mysql> CREATE TABLE tb2(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(20) NOT NULL UNIQUE KEY,
-> `age` INT DEFAULT 18
-> );
数据操作
插入数据
INSERT [INTO] table_name [(column_name,...)]
{VALUES|VALUE} ({expr|DEFAULT},...),(...),...;
例:
mysql> INSERT INTO `tb2`(`name`)
-> VALUES('rose'),
-> ('tizi')
-> ;
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM `tb2`;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | rose | 18 |
| 2 | tizi | 18 |
+----+-------+------+
2 rows in set (0.00 sec)
mysql> INSERT INTO `tb2` SET `name`='taka';
Query OK, 1 row affected (0.07 sec)
mysql> INSERT INTO `tb2` SET `name`='budong',`age`=24;
Query OK, 1 row affected (0.07 sec)
更新数据
UPDATE tb_name
SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...
[WHERE where_condition];
例:
mysql> UPDATE `tb2` SET `age`=`age`+1;
Query OK, 3 rows affected (0.40 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> UPDATE tb2 SET age=20 WHERE name='taka';
Query OK, 1 row affected (0.39 sec)
Rows matched: 1 Changed: 1 Warnings: 0
删除数据
DELETE FROM tbl_name [WHERE where_conditon];
例:
mysql> DELETE FROM tb2 WHERE id = 3;
Query OK, 1 row affected (0.40 sec)
注:不添加WHERE则会删除全部记录
表关系
外键约束FOREIGN KEY
外键约束FOREIGN KEY,保持数据一致性,完整性实现一对一或一对多关系。
一对多关系
举例,学校中一个学院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。
例:
创建学院表:
mysql> CREATE TABLE `department`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(15) NOT NULL
-> );
Query OK, 0 rows affected (0.61 sec)
创建学生表:
mysql> CREATE TABLE `student`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(20) NOT NULL,
-> `dept_id` INT,
-> FOREIGN KEY (`dept_id`) REFERENCES `department`(`id`)
-> );
Query OK, 0 rows affected (0.51 sec)
插入数据
mysql> INSERT INTO `department`(`name`)
-> VALUES('A'),
-> ('B')
-> ;
Query OK, 2 rows affected (0.10 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> INSERT INTO `student`(`name`,`dept_id`)
-> VALUES('s1',1),
-> ('s2',2),
-> ('s3',2)
-> ;
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0
一对一关系
举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息。用外键加主键的方式来实现这种关系。外键+唯一键
例:
学生表:
mysql> DESC `student`;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| dept_id | int(11) | YES | MUL | NULL | |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.06 sec)
建立详细学生表:
mysql> CREATE TABLE `student_details`(
-> `id` INT PRIMARY KEY,
-> `age` INT,
-> `gender` CHAR(1),
-> FOREIGN KEY (`id`) REFERENCES `student`(`id`)
-> );
Query OK, 0 rows affected (0.67 sec)
mysql>
多对多关系
举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。
例:
建立课程表:
mysql> CREATE TABLE `course`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(20) NOT NULL,
-> );
Query OK, 0 rows affected (1.18 sec)
学生与课程多对多关系表
mysql> CREATE TABLE `select`(
-> `s_id` INT,
-> `crs_id` INT,
-> PRIMARY KEY (`s_id`,`crs_id`),
-> FOREIGN KEY (`s_id`) REFERENCES `student` (`id`),
-> FOREIGN KEY (`crs_id`) REFERENCES `course` (`id`)
-> );
Query OK, 0 rows affected (0.50 sec)