MySQL基础语法
net start MySQL57
net stop MySQL57
mysql -h localhost -u root -p
查看引擎
show engines;
show variables like '%storage_engine';
show databases;
创建数据库
create database test_db;
show create database test_db;
删除数据库
drop database test_db;
选择数据库
use test_db;
查看当前选择的数据库
select database();
查看表
show tables;
创建表
create table tb_l
(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);
指定表主键,在创建时: id INT(11) primary key
或者在salary FLOAT,后加primary key(id)
主键由多个字段组成, primary key(id,deptId)
create table tb_2
(
id INT(11) primary key,
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);
create table tb_3
(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
primary key(id,deptId)
);
添加主键约束,使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。
alter table tb_3 add primary key (id);
删除主键 alter table tb_3 drop primary key;
外键约束
一个表中的一个字段是另一个表的主键,
如员工表tb_4的部门Id: deptId
和部门表tb_dept的主键id关联
deptId为外键,tb_4为从表(子表)
tb_dept为主表(父表)
外键约束
create table tb_dept
(
id INT(11) primary key,
name VARCHAR(25),
location VARCHAR(50)
);
create table tb_4
(
id INT(11) primary key,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
constraint fk_4_dept foreign key(deptId) references tb_dept(id)
);
在表tb_4上添加了名称为fk_4_dept的外键约束,外键名称为deptId,其依赖于表tb_dept的主键id
);之间可加engine=指定引擎,外键关联的表需要引擎相同
alter table tb_4 add foreign key (deptId) references tb_dept(id);
alter table tb_4 add constraint fk_4_dept foreign key (deptId) references tb_dept(id);//有命名
非空约束not null
唯一性约束nuique
create table tb_5
(
id INT(11) primary key,
name VARCHAR(25) not null,
deptId INT(11) nuique,
salary FLOAT
);
create table tb_6
(
id INT(11) primary key,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
constraint sth unique(name)
);
默认值
create table tb_7
(
id INT(11) default 1111
);
自动增加,一个表只能有一个字段使用auto_increment
初始值为1,每增加一条记录,字段值自动加1
且该字段必须为主键的一部分
字段需为整数类型 TINYINT SMALLIN INT BIGINT
create table tb_8
(
id INT(11) primary key auto_increment,
);
查看表的字段信息
describe/desc tb_2;
查看表详细结构
show create table tb_2;
修改表名
alter table tb_2 rename tb_1; rename后可加一个to
修改字段名
alter table tb_2 change id idd int(20); //可以只改字段的数据类型
修改字段的数据类型
alter table tb_2 modify id VARCHAR(30); //之后还可加约束条件not null、first、after等
修改字段的排列位置
alter table tb_2 modify name varchar(50) first; //或者after另一个字段
添加字段
alter table tb_2 add loc VARCHAR(50);
其后可添加约束条件
alter table tb_2 add c1 VARCHAR(10) not null;
alter table tb_2 add c2 VARCHAR(10) not null first; //添加c2为第一列
alter table tb_2 add c3 VARCHAR(10) after id; //添加到指定列后面
删除字段
alter table tb_2 drop c2;
更改表的存储引擎
alter table tb_2 engine=MyISAM;
可用show create table tb_2;查看
删除表的外键约束
alter table tb_5 drop foreign key fk_4_dept;
删除没有被关联的表
drop table if exists tb_2, tb_3; //if exists用于判断表是否存在
删除被其他表关联的主表
可以先删除子表,再删除父表
也可先删除外键约束再删除主表
删除表中所有数据
delete from tb_2;
数据库数据类型
1. 整数类型 tinyint(1个字节)、smallint(2个字节)、mediumint(3个字节)、int(4个字节)、bigint(8个字节)
id int(11), 11表示显示宽度
year int(4) 只显示4位数字的宽度
小于宽度用空格填充,大于宽度但不超过取值范围,依然可以插入而且能显示出来
浮点小数类型 float(4个字节)、double(8个字节)
定点小数类型 decimal(m,n) 压缩的'严格'定点数 m+2个字节
m表示精度,表示总共的位数
n表示小数位数
create table tmp(
x float(4,1),
y double(4,1),
z decimal(4,1)
);
insert into tmp values(5.12, 5.15, 5.123);
select * from tmp;
x y z
5.1 5.2 5.1
z被截断有警告
2.日期/时间类型 year(1个字节)、time(3个字节)、date(3个字节)、datetime(8个字节)、timestamp(4个字节)
3.字符串类型 char固定长度、varchar变长、binary、varbinary、blob、text、enum、set等,分文本字符串和二进制字符串
create table fruits(
f_id char(10) not null,
s_id int not null,
f_name char(255) not null,
f_price decimal(8,2) not null,
primary key(f_id)
);
insert fruits (f_id,s_id,f_name,f_price)
values('a1',101,'apple',5.2),
('b1',101,'blackberry',10.2),
('bs1',102,'orange',11.2),
('bs2',105,'melon',8.2),
('t1',102,'banana',10.3),
('t2',102,'grape',5.3),
('o2',103,'cocount',9.2),
('c0',101,'cherry',3.2),
('a2',103,'apricot',2.2),
('l2',104,'lemon',6.4),
('b2',104,'berry',7.6),
('m1',106,'mango',15.7),
('m2',105,'xbabay',2.6),
('t4',107,'xbababa',3.6),
('m3',105,'xxtt',11.6),
('b5',107,'xxxx',3.6);
select f_id,f_name from fruits;
select *from fruits;
desc fruits;
show create table fruits;
select f_id, s_id, f_name, f_price from fruits;
select *from fruits where f_price<=10;
select *from fruits where f_price between 2 and 6;
select s_id,f_name,f_price from fruits where s_id in (101,102,105) order by f_name desc;//降序
select s_id,f_name,f_price from fruits where s_id not in (101,102,105) order by s_id asc;//升序
select *from fruits where f_name like 'b%'; //以b开头
select *from fruits where f_name like '%g%'; //含有g
select *from fruits where f_name like 'b%y'; //以b开头 y结尾
select *from fruits where f_name like '____y'; //以y结尾,前面有几个_就有几个字符