数据库的基本操作
show databases;---查看所有数据库
use dbst;---选择数据库
create database dbst;---创建数据库
alter database dbst character set 字符集;---更改数据库的字符集(gbk、utf-8)
drop database dbst---删除数据库(慎用)
show database dbst---查看数据库的结构信息
表的基本操作
create table student()---创建表以及字段
字段名1 数据类型1 约束,
字段名2 数据类型2 约束,(最后一个字段后不加",")
…… …… ……
);
drop table student;删除表
descride student;/desc student;---查看表的基本类型(推荐使用"desc")
show create table student;---查看表的结构信息
alter table old-student rename [to] new-student;---更改表名(old==原名字,new==新名字[to]可加可不加)
alter table student modify id int(20);---修改字段的数据类型
alter table student modify id int(20),modify id int(20)…………---修改多个字段的数据类型
alter table student modify id int(20) first|after columnst;---修改字段的排列位置
alter table student change old-id new-cilimnst int(20);---修改字段名以及数据类型(也可修改数据类型)
alter table student add new-id data-type[约束][first|after columnst];---给表添加字段,默认为最后端,after是在一个指定字段的后面插入
alter table student drop columnst;---删除字段
完整性约束
primary key---主键约束,约束字段的值为唯一标识的,不能重复也不能为空,一般用于重要的信息
create table student(---创建表时添加
id int(10) primary key,
id int(10),
…………
);
create table student(---创建表时在最后面添加
id int(10),
name varhcar(20),
…………,
[constraint pk_name]primary key(id,name……)(可添加多个)
);
alter table student add[constraint pk_name]primary key(id,name……);---(可添加多个)
alter table student drop primary key;---删除主键约束
unique key---唯一约束
create table student(---创建表时添加
id int(10) unique,
id int(10),
…………
);
create table student(---创建表时在最后面添加
id int(10),
name varhcar(20),
…………,
[constraint uk_name]unique(id,name……)(可添加多个)
);
alter table student add[constraint uk_name]unique(id,name……);---(可添加多个)
alter table student drop index ukst;---删除唯一约束
notnull key---非空约束
create table student(---创建表时添加
id int(10) not null,
id int(10),
…………
);
alter table student modify id int(20) not null;---在已存在的添加非空约束
alter table student modify id int(20) null;---删除非空约束(就是设为null)
default---默认值约束
create table student(---创建表时添加
id int(10) default value,
id int(10),
…………
);
alter table student modify id int(20) default value;---在已存在的添加
alter table student modify id int(20);---删除默认值
auto——increment---自动增加约束(配合主键一起使用)
create table student(---创建表时添加
id int(10) auto_increment,
id int(10),
…………
);
alter table student modify id int(20) auto_increment;---在已存在的添加
alter table student modify id int(20);---删除自增
foreign key---外键约束
create table child-student(---在建表是添加外键约束
id int(10),
name varhcar(20),
…………
[constraint fkst] foreign key(child-columnst) references parent-student(parent-columnst)
);
alter table chile-student(添加到的表名) add [constraint fkst](外键名) foreign key(child-columnst(添加到的字段)) parent-student(被添加表名) (parent-columnst(被添加的字段));
alter table chile-student drop foreign key fkst;
索引的基本使用
索引:普通索引、唯一索引(自动创建)、主键索引(自动创建)、全文索引、空间索引、
show index from student;---查看索引
普通索引
create table student(---创建表时添加
id int(10) primary key,
id int(10),
…………
index|key[index_name][index_type](column_name [(lengt)[asc(升)|desc(降)])
);
create index index_name [index_type] on table_name(column_name1[(lengt)[asc(升)|desc(降)]……);---在存在的表创建索引
alter table student add index indexst(字段);---使用alter创建
唯一索引
create table student(---创建表时添加
id int(10) primary key,
id int(10),
…………
unique [index|key][index_name][index_type](column_name [(lengt)[asc(升)|desc(降)])
);
create unique index index_name [index_type] on table_name(column_name1[(lengt)[asc(升)|desc(降)]……);---在存在的表创建索引
alter table student add unique index indexst(字段);---使用alter创建
主键索引
create table student(---创建表时添加
id int(10) primary key,
id int(10),
…………
primary key [index|key][index_name][index_type](column_name [(lengt)[asc(升)|desc(降)])
);
alter table student add primary key(字段);---使用alter创建
全文索引
必须是char、varchar、text否则报错
create table student(---创建表时添加
id int(10) primary key,
id int(10),
…………
fulltext [index|key][index_name][index_type](column_name [(lengt)[asc(升)|desc(降)])
);
alter table student add fulltext index indexst(字段);---使用alter创建
空间索引
必须是空间类型
create table student(---创建表时添加
id int(10) primary key,
id int(10),
…………
spatial [index|key][index_name][index_type](column_name [(lengt)[asc(升)|desc(降)])
);
create spatial index index_name [index_type] on table_name(column_name1[(lengt)[asc(升)|desc(降)]……);---在存在的表创建索引
alter table student add spatial index indexst(字段);---使用alter创建
复合索引
create table student(---创建表时添加
id int(10) primary key,
id int(10),
…………
[index|key][index_name][index_type](column_name [(lengt)[asc(升)|desc(降)]),(column_name [(lengt)[asc(升)|desc(降)]……)
);
alter table student add index indexst(字段、字段……);---使用alter创建
删除索引
alter table student drop index|key indexst;
drop index indexst on student
MySQL数据类型
MySQL类型大概为5种:整数类型、浮点类型、日期和时间类型、字符串类型、二进制类型(整数类型和浮点类型称为数值数据类型)
整数类型
整数类型包括 TINYINT(tinyint)1字节、SMALLINT(smallint)2字节、MEDIUMINT(mediumint)3字节、INT(int)4字节、BIGINT(bigint)8字节
数据类型 取值范围 存储需求
TINYINT -128〜127 0 〜255
SMALLINT -32768〜32767 0〜65535
MEDIUMINT -8388608〜8388607 0〜16777215
INT (INTEGER) -2147483648〜2147483647 0〜4294967295
BIGINT -9223372036854775808〜9223372036854775807 0〜18446744073709551615
浮点类型
浮点类型有两种,分别是单精度浮点数FLOAT(float)和双精度浮点数DOUBLE(double);定点类型只有一种,就是 DECIMAL(becimal)
类型名称 说明 存储需求
FLOAT 单精度浮点数 4 个字节
DOUBLE 双精度浮点数 8 个字节
DECIMAL (M, D),DEC 压缩的“严格”定点数 M+2 个字节(无解释,比较难懂)
日期和时间类型
MySQL 中有多处表示日期的数据类型:YEAR(year)、TIME(time)、DATE(date)、DTAETIME(datetime)、TIMESTAMP(timestamp)
类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901 ~ 2155 1 个字节
TIME HH:MM:SS -838:59:59 ~ 838:59:59 3 个字节
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-3 3 个字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 个字节
字符串类型
MySQL 中的字符串类型有 CHAR(char)、VARCHAR(varchar)、TINYTEXT(tinytext)、TEXT(text)、MEDIUMTEXT(mediumtext)、LONGTEXT、ENUM、SET 等
类型名称 说明 存储需求
CHAR(M) 固定长度非二进制字符串 M 字节,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT 非常小的非二进制字符串 L+1字节,在此,L<2^8
TEXT 小的非二进制字符串 L+2字节,在此,L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此,L<2^24
LONGTEXT 大的非二进制字符串 L+4字节,在此,L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目 (最大值为65535)
SET 一个设置,字符串对象可以有零个或 多个SET成员 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)
二进制类型
插入、更新、删除数据
插入数据
insert into book values(value1,value2)---全部插入
insert into book (column_name……)values(value)---按照字段插入
insert into book values(value1,value2),(value1,value2)---插入多条数据
insert into student values(column_name)select column_name from table_name2 where sex='女';---将查询到的数据插入到表1中
更新数据
update table_name set column_name=value where column_name = '';---更新指定的字段
update table_name set column_name=value---更新该名字的全部字段
删除数据
delete from table_name where where_condition;---删除指定的纪录
delete from table_name;---删除表里的所有记录但是不删除表
truncate table_name;---重新建立该表为全新的空表
单表查询
select * from table_name;---查看所有字段的数据
select column_name1,column_name2…… from table_name;---查看指定字段的数据
select distinct column_name1,column_name2…… from table_name;---过滤指定字段重复的数据
select column_name(+-*/) from table_name;---对查询出来的数据进行运算
select column_name [as] othername1 from student;---字段别名查询
select column_name1 from student order by order_name[asc|desc];---对查询的数据进行排序
select column_name1 from student order by order_name[asc|desc],orderst2[asc|desc];---对查询的多个数据进行排序
条件查询
and==&& or==|| not==!
select column_name1……from table_name where where_condition;---按照条件查询
>大于 <小于 >=大于等于 <=小于等于 =等于 <>/!=不等于
[not] between...and...---查询范围
select column_name1...from table_name where column_name between value1 and value2;
distinct
select distinct job from emp;---过滤重复的数据
select *,(ifnull(comm,0)+sal) as 总 from emp;---相加得数给为null得设置默认值
select *,(sal*deptno) as 总 from emp;---相加多项
[not] in---指定是否在集合里
select column_name...from table_name where column_name [not] in (value1,value2...);
is [not] null---是否是空值
select column_name...from table_name where column_name is [not] null;
[not] like---模糊查询,是否存在这个字母或数字(%自动补充,_一个占位)
select column_name...from table_name where column_name [not] like 'value';
and---多条件查询(都满足)
select column_name...from tbalest where where_name1 and where_name2...;
or---多条件查询(一个满足即可)
select column_name...from tbalest where where_name1 or where_name2...;
select column_name...from table_name where where_name limit [start_index] row_count;---限制查询,限制查询几个,(start_index 从第几个开始,row_count 显示几行数据)
函数
concat(str1,str2...strn)---讲多个字符串拼接称一个新的字符串
insert(str,index,n,newstr)---将字符串str第index位置开始n个字符替换为字符串newstr
length(str)---获取字符串str的长度
lower(str)---将字符串转换为小写
upper(str)---将字符是转换我大写
replace(str,oldstr,newstr)---用字符串newstr替换字符串str中所有的子字符串oldstr
substring(str,index,n)---获取从字符串str和index位置开始的n个字符
日期、时间
curdate()---返回当前日期
curtime()---返回当前时间
now()---返回当前日期和时间
sysdate()---返回该函数执行的日期和时间
数字函数
函数名 作用
AVG() 返回某字段的平均值
COUNT() 返回某字段的行数
MAX() 返回某字段的最大值
MIN() 返回某字段的最小值
SUM() 返回字段的和
select max(column_name)...from table_name;---使用方法
系统函数
database()---返回当前数据库名
version()---返回当前MySQL的版本号
user()---返回当前登录的用户名
多表查询
select * from table1 cross join table2;---两个表交叉查询(cross join)
select * from table1 natural join table2;---自然连接(natural join)
select Column_name1... from emp e inner join dept d on e.deptno=d.deptno;---内连接(inner join)on连接