MySQL常用语法

1.什么是数据库? 一个装数据的大容器,有数据文件,日志文件,DBMS(数据库管理软件)
2.数据库是用来做什么的? 存储数据的
3.有哪几个数据库?

DB2 ORACLE SQL Server mySql

4.SQL语言分类
DDL语句:数据定义语言 create(创建),drop(移除),alter(改变)等 对数据库,表,索引等数据对象进行定义 DML语句:数据操作语言 insert(添加) update(修改) delete(删除) select(查询)DCL语句:数据控制语言 主要控制数据库,表,字段,用户的访问权限和安全级别的授予

5.DDL语句 注意:每一条语句后面都要跟分号(;)或\g结束,或者ctrl+c
1.创建数据库语法:
create databases 数据库名称

代码示例:
mysql> create database lanqiao; Query OK, 1 row affected (0.00 sec)mysql> show databases -> \g

测试结果:
+--------------------+ | Database| +--------------------+ | information_schema | | lanqiao| | mysql| | performance_schema | | sakila| | sys| | world| +--------------------+ 7 rows in set (0.00 sec)

  • information_schema:注意存储了数据中存储的数据库对象,比如用户表,列的信息。权限信息,字符集信息
  • mySql:存储系统的用户权限
  • world:测试案例表
2.选择数据库语法
use 数据库名称

代码测试:
mysql> use lanqiao; Database changed

3.显示数据库中所有表语法
show tables;

4.删除数据库语法
drop database 数据库名称

代码测试:
mysql> drop database lanqiao -> \g Query OK, 0 rows affected (0.03 sec)数据库删除后,下面的所有的表都被删除

5.创建表语法
create table 表名( 列名1:列的类型 列名2:列的类型 列名3:列的类型)

代码测试:
mysql> create table emp( -> ename varchar(10), -> hiredate date, -> sal int, -> deptno int -> ); Query OK, 0 rows affected (0.18 sec)

  • 一个表相当一个类,列名相当类的属性
  • 表名:等价于文件的名称可以为任意目录
  • 列名:表头
  • 列的类型:int , char,varchar ....
  • 注意:创建表的时候需要先选中数据库,就是制定将表创建到那个数据库中
6.显示表结构(desc语法)
代码测试:
mysql> desc emp -> \g

测试结果
+----------+-------------+------+-----+---------+-------+ | Field| Type| Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | ename| varchar(10) | YES|| NULL|| | hiredate | date| YES|| NULL|| | sal| int(11)| YES|| NULL|| | deptno| int(11)| YES|| NULL|| +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)

7.显示创建表的语法
show create table emp;

测试代码:
mysql> show create table employ;

8.删除表
drop table 表名

9.修改列的类型语法
alter table 表名 modify 列名 列的类型;

测试代码:
mysql> alter table emp modify ename varchar(20); Query OK, 0 rows affected (0.06 sec) Records: 0Duplicates: 0Warnings: 0

10.添加列语法
alter table 表名 add column 列名 类型;

测试代码:
mysql> alter table emp add age int(3); Query OK, 0 rows affected (0.24 sec) Records: 0Duplicates: 0Warnings: 0

11.删除表的列:
alter table 表名 drop 列名;

测试代码:
mysql> alter table emp drop age; Query OK, 0 rows affected (0.29 sec) Records: 0Duplicates: 0Warnings: 0

12.修改列的名称
语法:
alter table 表名 change 原始名称 新的名称 列的类型;
测试代码:
mysql> alter table emp change ename name varchar(20); Query OK, 0 rows affected (0.04 sec) Records: 0Duplicates: 0Warnings: 0

注意:
  • change和modify都可以修改表的定义
  • change后面需要写2次列名,不方便
  • 但是change的优点可以修改列的名称,modify不可以
13.表改名
语法:
alter table 表名 rename 新表名

代码:
mysql> alter table emp rename example; Query OK, 0 rows affected (0.10 sec)

14.修改列的排列顺序
DML语句
DML是操作对数据库中表记录的操作 主要表的记录操作有: 插入(insert) 查询(select) 删除(delete) 更改(update)

1.插入(insert)一次添加多条
语法:
insert into tablename(列名1,列名2.....列名n) ,(值1,值2.......值n), ,(值1,值2.......值n), ,(值1,值2.......值n);

代码:
mysql> insert into example(name,age,date)values('csw',10,'1'); Query OK, 1 row affected (0.04 sec)对于含可空列的,非空但是含有默认值的字段,自增字段,可以不用在insert后添加列名,values后面直接对应列就行

代码:
mysql> insert into emp(name)values('guang'); Query OK, 1 row affected (0.03 sec)mysql> select * from emp; +-------+------+------+ | name| age| date | +-------+------+------+ | csw|10 | 1| | guang | NULL | NULL | +-------+------+------+ 2 rows in set (0.00 sec)表结构(允许列为空): +------+ | Null | +------+ | YES| | YES| | YES| +------+

2.更改(update)
语法:
update 表名 set 列名1 = 值1,列名2 = 值2...列名n = 值n; 对表中的数据,可以通过update命令进行修改

代码:
mysql> update csw setname = '关头强'; Query OK, 4 rows affected (0.04 sec) Rows matched: 4Changed: 4Warnings: 0 //一般都会加上where语句

代码:
mysql> update csw set sal = '1000' where name = '关头强'; Query OK, 4 rows affected (0.03 sec) Rows matched: 4Changed: 4Warnings: 0

代码:
mysql> select * from csw;

结果:
+-----------+-----------+------+-------+ | name| hiredate| sal| depno | +-----------+-----------+------+-------+ | 关头强| 2017-4-15 | 1000 | 1000| | 关头强| 2080-5-1| 1000 | NULL| | 关头强| 2080-5-1| 1000 | NULL| | 关头强| 2001-1-1| 1000 | NULL| +-----------+-----------+------+-------+ 4 rows in set (0.00 sec)

由于没有加where条件,所以将所有的name都修改了。而下面是只修改了depno=1000那一项
代码:
mysql> update csw set sal = sal+500 where depno = 1000; Query OK, 1 row affected (0.14 sec) Rows matched: 1Changed: 1Warnings: 0

结果:
mysql> select * from csw; +-----------+-----------+------+-------+ | name| hiredate| sal| depno | +-----------+-----------+------+-------+ | 关头强| 2017-4-15 | 1500 | 1000| | 关头强| 2080-5-1| 1000 | NULL| | 关头强| 2080-5-1| 1000 | NULL| | 关头强| 2001-1-1| 1000 | NULL| +-----------+-----------+------+-------+ 4 rows in set (0.00 sec)

修改表中多列的数据:
mysql> update emp set sal = 3000,deptno = 1 where name = 'aaa'; Query OK, 1 row affected (0.04 sec) Rows matched: 1Changed: 1Warnings: 0mysql> select * from emp;

结果:
+-------+------------+------+--------+ | name| hiredate| sal| deptno | +-------+------------+------+--------+ | admin | 1999-09-09 | 1500 |1 | | wuyu| 2014-08-09 | 2000 |2 | | aaa| NULL| 3000 |1 | +-------+------------+------+--------+ 3 rows in set (0.00 sec)

3.删除(delete)
语法:
delete from tablename [where condition]

代码:
mysql> delete from csw where sal = '1000'; Query OK, 3 rows affected (0.03 sec)

结果:
mysql> select * from csw; +-----------+-----------+------+-------+ | name| hiredate| sal| depno | +-----------+-----------+------+-------+ | 关头强| 2017-4-15 | 1500 | 1000| +-----------+-----------+------+-------+ 1 row in set (0.00 sec)

注意:如果不加条件会把表的所有信息删除
4.查询(select)
数据插入到表中,就可以使用select命令进行各式各样的查询 mysql> select * from csw; +-----------+-----------+------+-------+ | name| hiredate| sal| depno | +-----------+-----------+------+-------+ | qiang| 2017-4-15 | 3000 | 1000| | 小强| 2080-5-1| NULL | NULL| | 小强| 2080-5-1| NULL | NULL| | 打不死| 2001-1-1| NULL | NULL| +-----------+-----------+------+-------+*表示要将所有的列信息全部显示出来.mysql> select name,sal from emp; +-------+------+ | name| sal| +-------+------+ | admin | 2000 | | wuyu| 2000 | +-------+------+ 2 rows in set (0.00 sec)

注意:性能问题,推荐写列名,不要使用*号
5.查询不重复的记录.distinct 去除重复.###
mysql> select * from dept; +--------+----------+ | deptno | deptname | +--------+----------+ |1 | aa| |2 | aa| |3 | bb| |4 | cc| +--------+----------+ 4 rows in set (0.00 sec)mysql> select distinct deptname from dept; +----------+ | deptname | +----------+ | aa| | bb| | cc| +----------+ 3 rows in set (0.04 sec)

6.条件查询 where关键字可以显示用户指定的数据
逻辑运算符:
=,>,<,>=,<=,!=,<>

测试语句:
mysql> select * from dept where deptno > 2; +--------+----------+ | deptno | deptname | +--------+----------+ |3 | bb| |4 | cc| +--------+----------+ 2 rows in set (0.00 sec)逻辑运算符(or,and) mysql> select * from dept where deptno = 1 or deptname = 'cc'; +--------+----------+ | deptno | deptname | +--------+----------+ |1 | aa| |4 | cc| +--------+----------+ 2 rows in set (0.02 sec)mysql> select * from emp where name ='admin' and sal >1000; +-------+------------+------+--------+ | name| hiredate| sal| deptno | +-------+------------+------+--------+ | admin | 1999-09-09 | 2000 |1 | +-------+------------+------+--------+ 1 row in set (0.00 sec)

重点 : 排序(order by)
语法:
select * from 表名 [where 条件] [order by 列名1[desc|asc],列名2 [desc|asc]....列名n [desc|asc]]desc : 降序 asc : 升序

语句:
mysql> select * from emp order by sal desc ,deptno desc; +-------+------------+------+--------+ | name| hiredate| sal| deptno | +-------+------------+------+--------+ | wuyu| 2014-08-09 | 2000 |2 | | admin | 1999-09-09 | 2000 |1 | | wwwaa | NULL| 1000 |3 | +-------+------------+------+--------+ 3 rows in set (0.00 sec)

DCL语句 1.主要是DBA用来管理系统中的对象权限.
创建一个数据库用户wuyu,具有对lq数据库中所有表的查询和添加权限. mysql> grant select,insert on lq.* to 'wuyu'@'localhost' identified by '123'; Query OK, 0 rows affected, 1 warning (0.22 sec)C:\Users\Administrator>mysql -uwuyu -p123 mysql -u用户名 -p密码

2.MySQL支持的数据类型
1. 数值类型 1. integerjava int 2. smallint32767~65535 3. decimal,dec(m,d) 和doublt范围相同 4. float 5. real不知道 6. double 7. money 2. 字符类型 1. char0~255 之间的字符 2. varcahr0~65535的字符 3. text65535 4. longtext~~~~~~ 5. VARBINARY(M) 可以存储多少M的字节. 3. 日期和时间 1. dateyyyy-mm-dd 2. datetimeyyyy-mm-dd hh:MM:ss 3. timestamp时间戳 4. timehh:MM:ss 5. yearyyyy

【MySQL常用语法】MySQL的左连接与右连接:http://www.jianshu.com/p/57e49960abb4

    推荐阅读