MySQL基本操作
数据库操作指令都由';'结尾,代表执行命令,不加分号换行表示继续写。
SQL语言(结构化查询语言)
SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型: 1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如create drop alter -- create 用于创建数据库,创建表,创建视图 -- drop 用于删除数据库,删除表,删除视图 -- alter 用于修改表的定义,修改视图的定义 2、DML语句 数据库操纵语言: 插入数据insert、删除数据delete、更新数据update、查询数据select -- insert 用于插入数据 -- update 用于更新数据 -- delete 用于删除数据 -- select 用于查询数据 3、DCL语句 数据库控制语言: 例如控制用户的访问权限grant、revoke -- grant 用于给用户增加权限 -- revoke 用于收回用户权限
查看当前用户下所有数据库名称
show databases;
查看数据库创建信息
show create database 表名;
查看当前位于那个数据库下
select database()
切换数据库
use db -- 切换到db数据库
创建数据库
create database db1 -- 创建一个名为db1的数据库,默认编码为utf8 -- 创建时设置编码,db1为新建库名 create database db1 default character set=utf8
删除数据库
drop database db -- 删除名为db的数据库,如果这个数据库不存在,就会报错 drop database if exists db -- 就算db不存在,也不会报错
导出现有数据库数据:
mysqldump -u用户名 -p密码 数据库名称 >导出文件路径 -- 结构+数据 mysqldump -u用户名 -p密码 -d 数据库名称 >导出文件路径 -- 结构
导入现有数据库数据
mysqldump -uroot -p密码 数据库名称 < 文件路径
修改数据库的字符集
ALTER DATABASE 库名 CHARACTER SET utf8 COLLATE utf8_general_ci;
操作表
建表
create table 表名(列名 对应值的类型(对应值的长度) not null(是否可以为空,默认为可以为空) primary key(设置为主键,不能重复,不可为空),列名 对应值类型(对应值长度)) ENGINE=MYISAM -- 设置搜索引擎,默认innodb DEFAULT CHARSET=utf8; -- 设置编码方式,默认utf8 -- 条件AUTO_INCREMENT主键自增
查看表结构
desc 表名; describe 表名; show create table 表名; -- 查看表的创建信息
修改表名
alter table 表名 rename 新表名;
增加字段
alter table 表名 add 字段名 数据类型 约束条件, add 字段名 数据类型 约束条件; -- 添加多列逗号隔开 alter table 表名 add 字段名 数据类型 约束条件 first; -- 添加在开头 alter table 表名 add 字段1 数据类型 约束条件 after 字段2; -- 将字段1 加在字段2后
删除字段
alter table 表名 drop 字段名;
修改字段
alter table 表名 modify 字段名 数据类型 约束条件; -- 可以用来修改数据类型和约束条件,要写全 --列名称修改,也可以用来修改约束条件 alter table 表名 change 原列名 新列名 类型 [约束条件]; -- 给字段增加约束条件 alter table 表名 alter column 字段 set 约束条件;
删除表
drop table 表名;
修改表的搜索引擎
alter table '表名' engine = 引擎
拷贝表
create table 表名 select * from 库.表; -- 创建表的时候使用另一个表的数据 -- 只拷贝表的结构,不拷贝数据 create table 表名 select * from 库.表 where 1=2; -- 设置一个不成立的条件,查不到数据
操作数据
添加数据
insert into 表名(列名,多个列名逗号隔开) values ('值','与列名一一对应'), ('可以一次添加多行','与之前逗号隔开')
删除数据
delete from 表名 where 条件and条件 -- 会删除所有满足条件的行
清空数据
delete from 表名 truncate table 表名 -- 区别 -- 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。 -- 效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。 -- delete的效果有点像将mysql表中所有记录一条一条删除到删完, -- 而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。
修改数据
update 表名 set 列名=新的值 where 条件 -- 多个条件用and连接
查表
select 要查的列名,逗号隔开,*代表所有列 from 表名 -- 查全部 -- 还可以根据条件查 select 要查的列名,逗号隔开,*代表所有列 from 表名 where 条件
使用as给查询的结果字段取别名
selec name as “姓名” ,sex as "性别" from user select u.name as “姓名”,o.name as "英文名" ,u.sex as "性别" from user u ,other o where u.id = o.id; -- 其目的是让查询的结果展现更符合人们观看习惯,在多张表查询的时候可以直接的区别多张表的同名的字段。
条件
-- 条件之中有比较 >,<,=,<>,>=,<= -- 多个条件连接使用逻辑运算符 and 表示并且。or 表示或 -- 模糊查询 列名 like '%' '%s' 表示以s结尾 's%' 表示以s开头 '%s%' 表示包含s -- 查询列名对应值是某几个的: 列名 in (值得集合) -- 查询列名对应值不是某几个的: 列名 not in (值得集合) -- 范围查询 列名 between x and y == 列名>=x and 列名<=y
关于null:
当null位于条件语句时使用:字段 is null
null 作为值进行修改时 : 字段 = null
排序: 排序一定要放到最后,是先取到结果在进行排序
当以两个条件排序时,会先按照第一个条件进行排序,将相同的值按第二个进行排序
order by 列名 asc -- 根据某列进行排序,asc是默认值,正序(从小到大) order by 列名 desc -- 反序(从大到小) -- 排序前可以加条件,是对满足条件的进行排序
嵌套查询:一个查询的结果作为另一个查询的条件