一、复习
1.关系型数据库
Server -> Database -> Table -> Row -> Column
2.MySQL数据库
(1)服务器端启动
(2)客户端连接
mysql.exe -h127.0.0.1 -P3306 -uroot -p
mysql -uroot
(3)MySQL常用管理命令
quit/show databases/use 数据库名/show tables/desc 表名
(4)SQL命令
3.标准SQL语句分类
DDL: Data Define Language 定义数据结构
CREATE/DROP/ALTER
DML: Data Munipulate Language 操作数据
INSERT/DELETE/UPDATE
DQL:Data Query Language 查询数据
SELECT
DCL:Data Control Language 控制用户权限
GRANT(授权)/REVOKE(收权)
4.练习
创建脚本文件xz.sql,创建数据库xz,进入该数据库;
USE xz;
创建数据表user,包含uid、uname、upwd、email、phone、sex、userName(真实姓名)、registerTime(注册时间)、isOnline(是否在线)
CREATE TABLE user(
uid INT,
uname VARCHAR(16),
upwd VARCHAR(32),
emai VARCHAR(32),
phone VARCHAR(11),
sex VARCHAR(1), #M/F
userName VARCHAR(6),
registerTime VARCHAR(10), #2018-12-10
isOnline VARCHAR(1), #Y/N
);
插入5条数据,删除其中2条数据,修改2条数据,最后查询结果。
INSERT INTO user VALUES (‘1’, ’dingding’, ‘123456’, ’dingding@163.com’);
UPDATE user SET isOnline = ’Y’, registerTime= ’2019-3-1’WHERE uid = ’3’;
DELETE FROM user WHERE uid = ’2’;
SELECT * FROM user
二、DDL详解
1.计算机存储字符
(1)如何存储英文字符
ASCII: 总共有128个,对所有的英文字符及标点符号进行了编码。
`Hello -> 72102108108111`
Latin-1: 总共有256个,兼容ASCII码,同时对欧洲符号进行了编码。MySQL默认就使用这种编码。
(2)如何存储中文字符
GB2312: 对常用的6千多汉字进行了编码,兼容ASCII编码
GBK: 对2万多个汉字进行了编码,兼容GB2312
BIG5: 台湾繁体字编码,兼容ASCII
Unicode: 对世界上主流的语言常用的字符进行了编码,兼容ASCII,不兼容GBK,GB2312,BIG5等系列。具体分为UTF-8、UTF-16、UTF-32等存储方案。
(3)解决MySQL存储中文乱码
Mysqld.exe是后台运行的服务端程序也是mysql服务,mysql.exe是命令行客户端程序
1° sql脚本文件存储的编码utf8
2° 客户端连接服务器端使用的编码为utf8
SET NAMES UTF8;
3° 服务器端创建数据库存储使用的编码为utf8
CREATE DATABASE xz CHARSET= UTF8;
练习:创建脚本文件01_dangdang.sql,创建数据库dangdang,设置编码为utf8,进入该数据库,创建保存图书数据的表book,包含bid、title、author(作者)、price(价格)、publish(出版社)、pubTime(出版时间)
插入4条记录,修改第2条记录,删除第3条记录。
//设置客户端连接服务器编码
SET NAMES UTF8;
//丢弃数据库,如果存在
DROP DATABASE IF EXISIT dangdang;
//创建数据库dangdang,设置存储的编码
CREATE DATABASE dangdang CHARSET=UTF8;
#进入该数据库
USE dangdang;
//创建数据表
CREATE TABLE book(
bid INT,
title VARCHAR(16),
author VARCHAR(6),
price DECIMAL(6,2),
publich VARCHAR(10),
pubTime DATE
};
//插入数据
INSERT INTO book VALUES(……);
//查询数据
SELECT * FROM book
//删除数据
DELETE FROM book WHEHE bid=’’;
2.MySQL中的列类型
创建数据表的时候,指定的列可以存储的数据类型。
CREATE TABLE book( bid 列类型);
(1)数值类型——引号可加可不加
TINYINT 微整型,占1个字节 范围-128~127
SMALLINT 小整型,占2个字节 范围-32768~32767
INT 整型,占4个字节 范围 -2147483648~2147483647
BIGINT 大整型,占8个字节
FLOAT 单精度浮点型,占4个字节,范围3.4e38,范围比INT大的多,可能产生计算误差。
DOUBLE 双精度浮点型,占8个字节,范围比BIGINT大的多
DECIMAL(M,D) 定点小数,不会产生计算误差,M代表总的有效位数,D代表小数点后的有效位数
BOOL 布尔型,只有两个结果TRUE/1、FALSE/0,TRUE和FALSE不能添加引号;真正存储数据的时候,会使用TINYINT。
(2)日期时间类型——必须添加引号
DATE 日期型 ‘2018-12-31’
TIME 时间型 ‘14:22:30’
DATETIME 日期时间型 ‘2018-12-31 14:22:30’
(3)字符串类型——必须添加引号
VARCHAR(M) 变长字符串,不会产生空间浪费,操作速度相对较慢,M最大值是65535
CHAR(M) 定长字符串,可能产生空间浪费,操作速度较快,M最大值是255;用于存储手机号码,身份证号等固定长度的字符。
TEXT(M) 大型变长字符串,最多存2G
CHAR(5) 定长 | VARCHAR(5) 变长 | |
---|---|---|
a | a\0\0\0\0 | a\0 |
ab | ab\0\0\0 | ab\0 |
abc | abc\0\0 | abc\0 |
CREATE TABLE t1(
id SMALLINT,
age TINYINT,
commentCount INT,
price DECIMAL(6,2),
phone CHAR(11),
article VARCHAR(8000),
pubTime DATE
);
3.练习:创建02_xuezi.sql脚本文件,创建数据库xuezi,使用UTF8,进入该数据库,创建保存笔记本数据的表laptop,包含lid,title、price、stockCount(库存量)、shelfTime(上架时间)、isIndex(是否为首页推荐)
插入4条记录。
SET NAMES UTF8;
DROP DATABASE IF EXISIT xuezi;
CREATE DATABASE xuezi CHARSET=UTF8;
USE xuezi;
CREATE TABLE laptop(
lid SMALLINT,
title VARCHAR(128),
price DECIMAL(7,2),
stockCount SMALLINT,
shelfTime TIME,
isIndex BOOL
);
INSERT INTO xuezi VALUES(……);
练习:创建脚本文件03_tedu.sql,创建数据库tedu,设置UTF8编码,进入该数据库。
创建保存部门数据的表dept,包含did、dname(部门名称)、empCount(员工数量)
10 研发部 3
20 市场部 2
30 运营部 2
SET NAMES UTF8;
DROP DATABASE IF EXISIT tedu;
CREATE DATABASE tedu CHARSET=UTF8;
USE tedu;
CREATE TABLE tedu(
did TINYINT,
dname VARCHAR(8),
empCount SMALLINT
);
INSERT INTO tedu VALUES( 10, ‘研发部’, 3 ),( 20 , ‘ 市场部 ‘, 2 ),( 30 , ‘ 运营部 ‘ , 2);
创建保存员工数据的表emp,包含eid、ename、sex、birthday(生日)、salary(工资)、deptId(所属部门的编号)
插入4条记录
SET NAMES UTF8;
DROP DATABASE IF EXISIT emp;
CREATE DATABASE emp CHARSET=UTF8;
USE empi;
CREATE TABLE emp(
eid SMALLINT,
ename VARCHAR(18),
sex BOOL, //1->男 0->女
birthday DATE, //1995-110-20
salary DECIMAL(7,2),
deptId SMALLINT
);
4.列约束
MySQL可以对插入的数据进行特定的验证,只有满足条件才允许插入到数据表中,否则被认为是非法的插入。
例如:一个人的性别只能是男或者女,一个人的年龄0~100之间。
(1)主键约束——PRIMARY KEY
声明了主键列上的值不能出现重复,表中查询的记录会按照主键由小到大排序——加快查找的速度;通常主键添加到编号列中。
注意:一个表中只能有一个主键
(2)唯一约束——UNIQUE
声明了唯一约束的列上不能插入重复的值,允许插入NULL,而且允许插入多个NULL
NULL表示空,在插入数据时,无法确定要保存的数据。例如:无法确定员工的姓名、工资。
5.课后任务
(1)复习今天内容,重新编写代码
(2)练习:
创建脚本文件xz.sql,创建数据库xz,设置编码UTF8,进入该数据库。
创建保存笔记本分类的表xz_laptop_family(fid、fname、laptopCount笔记本数量)
10 联想 2 20 戴尔 2 30 小米 3
创建笔记本数据表 xz_laptop(lid、title、price、spec规格、detail详细介绍、shelfTime上架时间、isOnsale是否在售、familyId所属的分类编号)
添加7条数据