学习目的:了解MySQL数据库中数据库的创建和删除,掌握数据表结构的创建、修改和删除,掌握约束的添加、修改和删除
重点:
- 表结构的创建、修改和删除
- 约束的类型
- 约束添加、修改和删除
难点:
- 表结构的修改
- 约束的添加
-- 1.数据库管理
-- 1.1创建数据库 CREATE DATABASE [IF NOT EXISTS] 数据库名
CREATE DATABASE IF NOT EXISTS MySQLDB;
-- 1.2 删除数据库
DROP DATABASE MySQLDB;
-- 2.数据表管理
-- 2.1创建表
/*CREATE TABLE 表名(
字段名1 数据类型 [约束条件],
字段名2 数据类型 [约束条件],
…
[其他约束条件],
[其他约束条件]
)其他选项(例如存储引擎、字符集等选项)*/
-- 2.2数据类型
-- 2.3约束(四种):
-- 主键约束 (PRIMARY KEY)
-- 唯一约束 (UNIQUE)
-- 非空约束 (NOT NULL)
-- 外键约束 (FOREIGN KEY)
-- 非空约束
CREATE TABLE test01(
uname VARCHAR(10) NOT NULL, /*非空*/
gender CHAR(1),
);
INSERT INTO test01 VALUES('tom',NULL); /*OK*/
INSERT INTO test01 VALUES('NULL',NULL); /*ERROR*/
INSERT INTO test01 VALUES('',NULL); /*OK mysql中空字符串不是null,可以插入*/
INSERT INTO test01 VALUES('123',NULL); /*ok 123与字符串123等价,有自动的类型转换*/
INSERT INTO test01 (gender) VALUES(NULL); /*ERROR*/
SELECT * FROM test01;
-- 建表时提供默认值,可以在插入数据时忽略非空列
CREATE TABLE test02(
uname VARCHAR(10) NOT NULL DEFAULT 'haha', /*非空*/
gender CHAR(1)
);
INSERT INTO test02 (gender) VALUES(NULL); /*ERROR*/
SELECT * FROM test02;
-- 唯一约束
CREATE TABLE test03(
uname VARCHAR(10) UNIQUE
);
INSERT INTO test03 VALUES('aa');
INSERT INTO test03 VALUES('aa');
INSERT INTO test03 VALUES(NULL); /*ERROR,重复了*/
INSERT INTO test03 VALUES(NULL); /*ok*/
SELECT * FROM test03;
-- 设置主键
CREATE TABLE classes(
classes_id INT PRIMARY KEY,
classes_name VARCHAR(10),
classes_dept VARCHAR(10)
);
-- DROP TABLE classes;
INSERT INTO classes VALUES(1001,'java01','计算机');
INSERT INTO classes VALUES(1001,'java01','软件工程');/*ERROR,主键重复了*/
-- 设置外键
CREATE TABLE teacher(
teacher_id INT PRIMARY KEY AUTO_INCREMENT,
teacher_name VARCHAR(10),
cid INT,
-- 表级约束
FOREIGN KEY (cid) REFERENCES classes(classes_id)
);
-- 外键列的值必须在主表的主键值范围内
INSERT INTO teacher VALUES(NULL,'tom',1001);/*当前表的主键设置自增了,所以传入null值时数据库会使用自增对象给主键提供值*/
INSERT INTO teacher VALUES(NULL,'tom',1002);/*ERROR,在 主表中没有1002这个主键值*/
SELECT * FROM teacher;
CREATE TABLE Persons(
id INT NOT NULL,
p_name VARCHAR(20) NOT NULL,
deparment VARCHAR(20),
address VARCHAR(20),
telNum VARCHAR(20)
);
CREATE TABLE classes (
classes_id INT PRIMARY KEY,
classes_name VARCHAR(10),
classes_dept varchar(10)
);
CREATE TABLE teacher (
teacher_id INT PRIMARY KEY ,
teacher_name VARCHAR(10),
cid INT ,
FOREIGN KEY(cid) REFERENCES classes(classes_id)
);
-- 3.复制表
-- 3.1复制表使用like,约束也会复制过来,记录不复制
CREATE TABLE dept2 LIKE dept;
SELECT * FROM dept2;
-- 3.2复制表:使用子查询,主外键约束不会复制,(符合条件的)记录会复制
CREATE TABLE dept3 SELECT * FROM dept;
SELECT * FROM dept3;
-- 4.删除表
DROP TABLE dept6;
-- 5.表的重命名:两种方法
RENAME TABLE dept6 TO dept7;
ALTER TABLE dept6 RENAME dept7;
-- 6.本章小结
-- ● 掌握数据库的创建和删除管理
-- ● 了解mysq的约束和数据类型
-- ● 掌握表结构的创建、删除
--
-- 7.课后作业
-- 1. 创建与dept表相同表结构的表dtest,将dept表中部门编号在40之前的信息插入该表。
CREATE TABLE dtest SELECT * FROM dept WHERE deptno=40;
-- 2. 创建与emp表结构相同的表empl,并将其部门编号为前30号的员工信息复制到empl表。
CREATE TABLE emp1 SELECT * FROM emp WHERE deptno<=30;