1. 创建数据库
create database test_db;
MySQL 不允许在同一系统创建两个相同名称的数据库。
如果加上IF NOT EXISTS从句,则可以避免类似错误。
create database if not exists test_db;
创建 MySQL 数据库时指定字符集和校对规则
create database if not exists test_db_char
default CHARACTER set utf8
default COLLATE utf8_chinese_ci;(mysql5.5版本及以上)
create database if not exists test_db_char
default CHARACTER set utf8
default COLLATE utf8_general_ci;(mysql5.5版本及以下)
查看数据库定义声明
show create database test_db;
2. 查看数据库
1. 查看所有数据库
show databases;
2、使用like从句查看
- 查看与test完全匹配的数据库
show databases like ‘test’;
- 查看名字中包含 test 的数据库:
show databases like ‘%test%’;
- 查看名字以 test 开头的数据库
show databases like ‘test%’;
- 查看名字以 test 结尾的数据库
show databases like ’%test‘;
3. 修改数据库
先查看数据库的定义声明
show create database test_db;
4. 删除数据库
drop database bbs;
若删除已经不在的数据库,会报此类错误
为避免报此类错误可用 drop database if exists bbs;
5.选择数据库
use test;
6.数据库MySQL存储引擎
查看系统所支持的引擎类型
show engines;
MySQL存储引擎优缺点
可以根据以下的原则来选择 MySQL 存储引擎:
- 如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB 是一个很好的选择。
- 如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。
- 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL
中使用该引擎作为临时表,存放查询的中间结果。 - 如果只有 INSERT 和 SELECT 操作,可以选择Archive 引擎,Archive
存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用
Archive 引擎。
提示:使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同的引擎以满足各种性能和实际需求。使用合适的存储引擎将会提高整个数据库的性能。
修改数据库临时的默认存储引擎
set default_storage_engine=引擎名字
set default_storage_engine=InnoDB;
但是当再次重启客户端时,默认存储引擎仍然是 MyISAM 。
7.数据库MySQL常见数据类型
1. 整数类型
tinyint、smallint、mediumnt、int、bigint、float、double、定点数类型decimal
2. 日期、时间类型
year、time、date、datetime、timestamp
3. 字符串类型
char、varchar、 varbinary、blob、text、enum、set等
5. 二进制类型
bit、binary、varbinary、tinyblob、blob、mediumblob、longblob
8.创建数据库表
1. 先使用数据库
use test_db;
2. 创建表emp1
create table emp1
(
id int(25),
name varchar(225),
sex varchar(225),
number int(50)
);
3. 查看表结构
describe emp1;
简写
desc emp1;
9.修改数据库表
1. 添加字段
表的第一列添加一个 int 类型的字段 age4
alter table emp1 add age2 int first;
列 name 后添加一个 int 类型的字段 name2
alter table emp1 add name2 int after name;
2. 修改字段数据类型
把字段name2的数据类型由int改为varchar(200)
alter table emp1 modify name2 varchar(200) ;
3.删除字段
删除表emp中的age4字段
alert table emp1
drop age4;
4、修改字段名称
修改表emp1中字段name2改为name3
alert table emp1
change name2 name3 varchar(100)
5、修改表名称
把表名emp1改为emp
alter table emp1
rename to emp;
10.删除数据库表
use test_db;
create table emp1
(
id int(11),
name varchar(100)
);
show tables;
drop table emp1;
show tables;
11.MySQL主键(PRIMARY KEY)
在创建表时设置主键约束
- create table emp1 (
id int(11) primary key,
name varchar(220),
unmber float )default CHARACTER set utf8 default COLLATE utf8_general_ci; - create table key_2 (
id int(11),
name varchar(220),
unmber float ,
primary key(id)
)default CHARACTER set utf8 default COLLATE utf8_general_ci;
在创建表时设置复合主键
- create table key_3 (
id int(11),
id2 int(11),
name varchar(220),
unmber float ,
primary key(id,id2)
)default CHARACTER set utf8 default COLLATE utf8_general_ci;
在修改表时添加主键约束 - alter table key_4 add primary key(id);
12.MySQL外键约束(FOREIGN KEY)
MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。
外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。
外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。
外键的主要作用是保持数据的一致性、完整性。例如,部门表 dept 的主键是 id,在员工表 tb_emp5 中有一个键 deptId 与这个 id 关联。
- 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。
- 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表
在创建表时设置外键约束
- create table name3
(
id int(11),
name varchar(220),
number int(25),
constraint name1
foreign key(name) references name1(id)
)default CHARACTER set utf8 default COLLATE utf8_general_ci;
在修改表时添加外键约束
- alter table name2
add constraint name1
foreign key(name) references name1(id);
13.插入数据
向表中的全部字段添加值
1.先创建一个表class1
-
create table class1
(
class_id int not null,
class_name varchar(50) not null,
class_grade float not null,
primary key(class_id)
) default CHARACTER set utf8 default COLLATE utf8_general_ci;
2.查看表内容
(此时为空)
select * from class1;
3.向表中插入数据 -
按表字段顺序添加
-
insert into class1
(class_id,class_name,class_grade )
values
(1,‘math’,89); -
查看数据
-
不按表字段顺序添加
-
insert into class1
(class_name,class_grade,class_id)
values
(‘English’,90,2); -
查看数据
-
不输入表字段添加
-
insert into class1
values
(5,‘chinese’,98);- 查看数据
- 查看数据
向表中指定字段添加值
- insert into class1
(class_id,class_name)
values
(8,‘py’);
4.使用 INSERT INTO…FROM 语句复制表数据
先创建表class2,字段与class1一样
- create table class2
(
class_id int not null,
class_name varchar(50) not null,
class_grade float not null,
primary key(class_id)
)default CHARACTER set utf8 default COLLATE utf8_general_ci;
查看class2数据为空 - select * from class2;
复制表class1的数据到表class2中 - insert into class2
(class_id,class_name,class_grade)
select
class_id,class_name,class_grade
from class1;