目录
MySQL数据库
MySQL安装与配置
注意使用root权限进行安装:
apt-get install mysql-server mysql-client
apt-get install libmysqlclient-dev
ubuntu命令行登录mysql,验证是否成功:
mysql -u root -p
输入密码,如果出现以下提示证明没有问题
mysql>
DDL数据定义语言
DDL:Data Definition Language
作用:用于描述数据库中要存储的现实世界实体的语言。即创建数据库和表的结构。
常用关键字:
CREATE 创建表
ALTER 修改表中对应的列
DROP 删除表
TRUNCATE 删除表中所有内容
- SQL语言不区分大小写
创建数据库
示例:
create database test; //创建名为test的DB
create table Person1(personID int NOT NULL AUTO_INCREMENT,PRIMARY KEY(personID),FirstName varchar(15),LastName varchar(15),Age int);
//创建表
NOT NULL表示该列值不能为空,AUTO_INCREMENT表示自动增长,PRIMARY KEY表示主键。
查看、删除数据库
修改、备份、恢复数据库
创建表
- 注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。建表至少需要
给出表中的一列信息,否则会报错。
例:user对象
id int
name string
password string
birthday date
Id | Name | Password | birthday |
---|---|---|---|
修改表
使用 ALTER TABLE 语句 追加, 修改, 或删除列的语法.
修改表的名称:Rename table 表名 to 新表名
修改表的字符集:alter table student character set utf8;
示例:
alter table persons add addr varchar(15);
alter table persons change addr addr1 varchar(15);
alter table Person drop addr_wd;
MySQL常用数据类型
分类 | 数据类型 | 说明 |
---|---|---|
数值类型 | BIT(M) BOOL,BOOLEAN TINYINT [UNSIGNED] [ZEROFILL] SMALLINT [UNSIGNED] [ZEROFILL] INT [UNSIGNED] [ZEROFILL] BIGINT [UNSIGNED] [ZEROFILL] FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] | 位类型。M指定位数,默认值1,范围1-64 使用0或1表示假或真 带符号的范围是-128到127。无符号0到255。 2的16次方 2的32次方 2的64次方 M指定显示长度,d指定小数位数 (5, 2) 表示比float精度更大的小数 |
文本、二进制类型 | CHAR(size) VARCHAR(size) BLOB LONGBLOB TEXT(clob) LONGTEXT(longclob) | 固定长度字符串(size表示 有多少个字符) 可变长度字符串 (varchar 是可变的) varchar(50)表示最大可以存放的长度是50 二进制数据 大文本 |
时间日期 | DATE/DATETIME/TimeStamp | 日期类型(YYYY-MM-DD) (YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可用于自动记录insert、update操作的时间 |
lVARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度。
DML数据操纵语言
DML:Data Manipulation Language
作用:用于向数据库表中插入、删除、修改数据。
常用关键字:
INSERT UPDATE DELETE
Insert语句
- 使用 INSERT 语句向表中插入数据。
插入的数据应与字段的数据类型相同。
数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
在values中列出的数据 。
字符和日期型数据应包含在单引号中。
插入空值,不指定或insert into table value(null)
mysql中文乱码
•mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
•client是客户端使用的字符集。
•connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
•database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
•results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
•server是服务器安装时指定的默认字符集设定。
•system是数据库系统使用的字符集设定。
注意插入数据时的中文问题:
show variables like 'character%';
如果插入中文时,要调整编码为GBK
show variables like 'character%';
修改客户端工具所用的编码
set character_set_client=gbk;
客户端显示结果的编码
set character_set_results=gbk;
Update语句
- 使用 update语句修改表中数据。
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
示例:
Delete语句
如果不使用where子句,将删除表中所有数据。
Delete语句不能删除某一列的值(可使用update)
使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
DQL数据查询语言
DQL:Data Query Language
作用:查询数据。
常用关键字:
SELECT
Select语句
基本select语句
Select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
From指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
在select语句中可使用表达式对查询的列进行运算
在select语句中可使用as语句
在where子句中经常使用的运算符
比较运算符 | > < <= >= = <> | 大于、小于、大于(小于)等于、不等于 |
---|---|---|
BETWEEN ...AND... | 显示在某一区间的值(含头含尾) | |
IN(set) | 显示在in列表中的值,例:in(100,200) | |
LIKE ‘张pattern’ | 模糊查询 | |
IS NULL | 判断是否为空 | |
逻辑运算符 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立,例:where not(salary>100); |
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name,like ‘_a%’;
用where筛选出age大于30的成员:
使用order by 子句排序查询结果。
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。
数据的完整性
数据完整性是为了保证插入到数据库中的数据是正确的,它防止了用户可能的输入错误。
数据完整性主要分为以下三类:
- 实体完整性:
规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现。
- 域完整性:
指数据库表的列(即字段)必须符合某种特定的数据类型或约束。比如NOT NULL。
- 参照完整性:
保证一个表的外键和另一个表的主键对应。
数据库主键
主键:表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。
当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。 作用 :
1)保证实体的完整性;
2)加快数据库的操作速度,主键默认建立索引
3) 在表中添加新记录时,会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) 自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
定义表的约束
- 定义主键约束
- primary key:不允许为空,不允许重复 (可以区分两条记录的唯一性)
- 删除主键:alter table tablename drop primary key;
- 定义主键自动增长
- auto_increment
- 定义唯一约束
- unique
- 定义非空约束
- not null
- 定义外键约束
- constraint ordersid_FK foreign key(ordersid) references orders(id);
示例:
create table pats(patID int NOT NULL AUTO_INCREMENT,PRIMARY KEY(patID),person1ID int
default NULL,patName varchar(15) default NULL,FOREIGN KEY (person1ID) REFERENCES persons(personID));
多表设计
避免数据的冗余
一对多
Create table province (
id int primary key,
province varchar(9) not null
)
insert into province values(1,'shandong');
Create table students(
id int primary key,
name varchar(5) not null,
province_id int not null
)
Alter table students add constraint FK_student_Provinced foreign key (province_id) references province(id);
alter table employee add constraint FK_employee_departmentid foreign key (departmentid) references department(id);
多对多
create table TEACHER(
ID int primary key,
NAME varchar(100)
);
insert into teacher values(1,'math teacher');
insert into teacher values(2,'chinese teacher');
insert into teacher values(3,'english teacher');
create table STUDENT3(
ID int primary key,
NAME varchar(100)
);
insert into student3 values(1,'lily');
insert into student3 values(2,'lucy');
insert into student3 values(3,'lilei');
insert into student3 values(4,'lilyzhou');
insert into TEACHER_STUDENT(1,1);
create table TEACHER_STUDENT(
T_ID int,
S_ID int,
primary key(T_ID,S_ID),
constraint T_ID_FK foreign key(T_ID) references TEACHER(ID),
constraint S_ID_FK foreign key(S_ID) references STUDENT3(ID)
);
一对一
方法1:外键关联+唯一
create table PERSON(
ID int primary key,
NAME varchar(100)
);
create table computer(
ID int primary key,
brand varchar(20),
PERSON_ID int unique,
constraint PERSON_ID_FK foreign key(PERSON_ID) references PERSON(ID)
);
方法2:主键关联
constraint PERSON_ID_FK foreign key(ID) references PERSON(ID)