1.show databases;查找本地数据库
2.create database database_name;创建数据库
3.show create database database_name\G 显示数据库的创建信息
4.drop database database_name;删除数据库
5.SHOW ENGINE\G 查看系统所支持的引擎类型
6.show variables like ‘storage_engine’; 查看默认存储引擎
7.use database_name;选择创建表的数据库
8.create table table_name
(id INT(11) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25));
创建表并且设置id为主键,自动增加1
9.CONSTRAINT 约束名 FOREIGN KEY (no主键) REFERENCES table_name(主键)
为表创建外键约束,使两个表有关联。
10.desc table_name;查看数据表的结构
11.show create table te6\G 查看数据表的详细结构
12.alter table te6<旧表名> rename te9<新表名>; 改变数据表名
13.alter table te9<表名> modify name<字段名> varchar(30);修改字段的数据类型
14.alter table te9<表名> change <旧字段名> <新字段名> <新数据类型>;修改字段名
15.alter table <表名> add <新字段> <数据类型> [约束条件] [first | after 已存在的字段名];添加字段
例:alter table te9 add wangxiang varchar(20) after nm;
16.alter table <表名> drop <字段名>;删除字段
17.alter table <表名> modify <字段1> <数据类型> first|after <字段2>;修改字段的排列位置
18.alter table <表名> engine = <更改后的存储引擎>; 更改表的存储引擎
19.alter table <表名> drop foreign key <外键约束名>;删除表的外键约束
20.drop table [if exists] 表1,表2,….表n;删除没有关联的数据表
*数据库支持的存储引擎是什么?原理是什么?有多少种存储引擎?各有什么优缺点?
21.create table te1(x tinyint, y smallint, z mediumint, m int, n bigint);数据库类型
22.create table te2(x float(m,n), y double(m,n), z decimal(m,n)); M是精度,表示总共的位数;N是标度,表示小数的位数
*数据库定义数据的语法公式:字段名+数据类型(各种类型)
*MySQL运算符:算数运算符、比较运算符、逻辑运算符、位运算符(位与&,位或|,位非~,位异或^,左移<<,右移>>)。
23.select num,num+10,num-3+5,num+5-3 from te3; 使用算术运算符举例
24.位运算是二进制0与1的异或非运算
25.select 1<<2,4<<2;1的二进制是0000 0001,左移两位之后变成0000 0100,即十进制整数4;
十进制4左移两位之后变成0001 0000,即变成十进制16;
左移指定的位数之后,左边高位的数值将被移出丢弃;位右移运算符同理
26.select 5&~1; 位取反运算符,先对1进行取反,再与5进行位与运算,涉及到运算符的优先级,不了解的请上网学习
MySQL函数
27.select abs(2),abs(-2),abs(-3.2);绝对值函数
28.select pi();返回圆周率
29.select sqrt(9),sqrt(-49);平方根函数
30.select mod(31,8),mod(234,10);求余函数
31.select ceil(-3.35),ceil(3.35);返回不小于x的最小整数值
32.select floor(-3.35),floor(3.35);返回不大于x的最大整数值
33.select rand(),rand(),rand();产生随机数,在0与1之间
34.select rand(10),rand(10),rand(30);rand(x)函数,如果x值相同,则产生的随机数也相同
35.select round(-1.14),round(1.14),round(1.66);将x值进行四舍五入
36.select round(1.38,1),round(1.38,0),round(232.38,-1),round(232.38,-2);
round(x,y)返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位
37.select truncate(1.99,1),round(1.38,1),round(19.99,-1);该函数直接截取值,并不进行四舍五入
38.select sign(x);符号函数
39.select pow(x,y)或者power(x,y);幂函数的运算
40.select exp(x);使用exp()函数计算e的乘方
41.select log(x);计算自然对数
42.select radians(角度);radians(函数将角度转为弧度)
43.select degrees(pi()),degrees(pi()/2);将弧度转化为角度
44.select sin(x);正弦函数
45.select asin(x);反正弦函数
46.select cos(x);余弦函数
47.select acos(x);反余弦函数
48.select tan(x);正切函数
49.select atan(x);反正切函数
50.select cot(x);余切函数
51.select char_length(‘data’),char_length(‘egg’);计算字符串字符个数
52.select length(‘data’),length(‘egg’);计算字符串长度
53.select concat(‘mysql’,’5.6’),concat(‘my’,NULL,’SQL’);concat()函数链接字符串,在字符串中有NULL,返回为NULL
54.select concat_ws(‘-‘,’1’,’2’,’3’);
55.select insert(‘Quest’,2,4,’what’) as col1,
insert(‘Quest’,-1,4,’what’) as col2,
insert(‘Quest’,3,100,’what’) as col3;
*insert(s1,x,len,s2)返回字符串s1,其子字符串起始于x位置和被字符串s2取代的len字符。
如果x超过字符串长度,则返回值为原始字符串。假如len的长度大于其他字符串的长度,
则从位置x开始替换。若任何一个参数为NULL,则返回值为NULL
56.select lower/lcase(‘AA’);将大写字母转化为小写字母
57.select upper(‘aa’),ucase(‘ss’);将小写字母转化为大写字母
58.select left(s,n); select right(s,n);获取指定长度的字符串函数
59.select lpad(s1,len,s2);select rpad(s1,len,s2);填充字符串函数,左侧填充,右侧填充
60.ltrim和rtrim函数删除字符串两侧的空格;trim(s1 from s);删除字符串两端指定的字符,返回的是s字符串
61.select repeat(s,n);重复生成字符串,s是字符串,n是重复的次数
62.select concat(‘(‘,space(6),’)’);返回一个由n个空格组成的字符串
63.select replace(‘wangxiang’,’w’,’z’);替换函数
64.strcmp(‘s1’,’s2’);函数比较字符串大小;substring(s,n,len)和mid(s,n,len)获取子串,n是位置,len是长度;
locate(str1,str)匹配子串开始位置的函数;reverse(s)字符串逆序的函数;elt(n,’s1’,’s2’,’s3’);返回指定位置的字符串;
fiele(s,s1,s2,…)返回指定字符串位置的函数;make_set(x,s1,s2,s3…);选取字符串的函数
65.select version();获取mysql版本号、连接数和数据库名的函数
66.select connection_id();查看当前用户的连接数
67.show processlist;输出当前用户的连接信息
68.select database(),schema();显示当前的数据库
69.select user();获取当前登录用户名
70.select password(‘wangxiang’);加密函数
71.select md5(‘wangxiang’);MD5加密
72.select encode(‘sercret’,’cry’),length(encode(‘secret’,’cry’));encode(str,pswd_str)使用pswd_str作为密码,加密str,
使用decode()解密结果结果是一个和str长度相同的二进制字符串
73.select decode(encode(‘str’,’pswd_str’),’pswd_str’);解密函数,先加密,再解密
查询数据
74.select {*|<字段列表>}[from <表1>,<表2>…] [where <表达式>] [group by ]
[having ] [order by] [limit[offset], ] ]
group by<字段>,该子句显示查出来的数据,并按照指定的字段分组
order by<字段>,该子句告诉mysql按什么样的顺序显示查询出来的数据,可以进行的排序有:升序(asc)、降序)(desc)
[limit[,]], 显示查询出来的数据条数
75.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));
创建一个表
76.insert into fruits(f_id,s_id,f_name,f_price) ->values(‘a1’,101,’apple’,5.2)向表中插入数据
77.select * from 表名; 单表查询所有字段
78.select 字段1,字段2,字段3….from 表名;查询多个字段
79.select 字段1,字段2,字段3….from 表名 where 查询条件;条件判断符(=、<>、<、>、<=、>、>=、between位于两值之间)
80.select 字段1,字段2,字段3….from 表名 where 字段名 in(检索条件1,检索条件2…..);带in关键字的查询
81.select 字段1,字段2,字段3….from 表名 where 字段名 between 2 and 4;查询2和4之间的数据,范围查询
82.select f_id,f_name from fruits where f_name like ‘b%’;
和Like一起使用的通配符‘%’、‘_’,该语句查询的结果返回所有以b开头的水果的id和name,“%”告诉Mysql,返回所有以字母b开头的记录,不管b后面有多少字符。
在搜索匹配是通配符“%”可以放在不同的位置。
*百分号通配符“%”,匹配任意长度的字符,甚至包括零字符;下划线通配符‘_’,一次只能匹配任意一个字符
*数据表创建的时候,设计者可以指定某列中是否可以包含空值(null)。控制不同于0,也不同于空字符串。空值一般表示数据未知、不适用或将在以后添加数据。
在select语句中使用is null子句,可以查询眸子段内容为空记录。
例如:select id,name,email from customers where email IS NULL;
或者查询不是空值:select id,name,email from customers where email IS NOT NULL;
83.select f_id,f_price,f_name from fruits where s_id=’101’ and f_price>=5;带and的多条查询语句
84.select s_id,f_price,f_name from fruits where s_id=101 or s_id=102;带OR的多条件查询
*OR操作符和IN操作符可以实现相同的功能。但是使用in操作符使得检索语句更加简明,并且in执行的速度要快于or,更重要的是使用in操作符,可以执行更加复杂的嵌套查询。
85.select distinct s_id from 表名;distinct关键字使查询结果不重复
86.select f_name from fruits order by f_name;order by按字母的顺序升序排列,默认是升序排列
87.select f_name,f_price from fruits order by f_name,f_price;多列排序,在对多列进行排序的时候们首先排序的第一列必须有相同的列值,才会对第二列进行排序。
如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。
88.select f_name,f_price from fruits order by f_name,f_price desc;指定排序方向,f_price按降序排列,f_name列仍按升序排列(ASC生序排列,关键字,默认)
89.[GROUP BY 字段][HAVING <条件表达式>] 分组查询,该关键字通常和集合函数一起使用,列如:MAX()、MIN()、COUNT()、SUM()、AVG()。
90.select s_id,COUNT(*) as total from fruits group by s_id;
91.select s_id,GROUP_CONCAT(f_name) as total from fruits group by s_id;显示字段的名称
92.select s_id,GROUP_CONCAT(f_name) as total from fruits group by s_id HAVING COUNT(f_name>1);使用HAVING过滤分组
93.select s_id,COUNT(*) as total from fruits group by s_id WITH ROLLUP; 使用with rooup关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出来的所有记录的总和。
94.select * from fruits group by s_id,f_name;多字段分组
95.LIMIT[位置偏移量] 行数; 第一个位置偏移量参数标识MySql从哪一行开始显示,是一个可选参数,如果不指定位置偏移量,将会从表中的第一条记录开始(第一条记录的位置偏移量是0),第二条记录的位置偏移量是1….以此类推);
第二个行数指示返回的记录条数。例如:select * from fruits LIMIT 2,2;从第三行开始,返回两行。
96.select COUNT(*) as cust from customers;使用COUNT()函数;select SUM(字段) as cust from customers;使用SUM(函数);
其他函数语法
连接查询
*连接是关系型数据库模型的主要特点。一个实体一个表,连接实体
一般所说的左连接,外连接是指左外连接,右外连接。做个简单的测试你看吧。
先说左外连接和右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1;
ID NAME
1 aaa
2 bbb
[TEST1@orcl#16-12月-11] SQL>select * from t2;
ID AGE
1 20
3 30
左外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 left join t2 on t1.id=t2.id;
ID NAME ID AGE
1 aaa 1 20
2 bbb
右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 right join t2 on t1.id=t2.id;
ID NAME ID AGE
1 aaa 1 20
3 30
从上面的显示你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录。如果没有匹配的id,比如说t1中id为2的t2中就没有。那边就以null显示。
右外连接过程正好相反。
再看内连接(也称为等值连接):
[TEST1@orcl#16-12月-11] SQL>select * from t1 inner join t2 on t1.id=t2.id;
ID NAME ID AGE
1 aaa 1 20
看到没有? 只有一条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id 那么符合t1.id=t2.id的记录只有id=1这一条,所以只显示一条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有行都显示出来。
上条sql语句等价于:
select * from t1,t2 where t1.id = t2.id
详情请查看:http://www.gwalker.cn/article-72.html
97.(1)子查询中常用的操作符有ANY(SOME)、ALL、IN、EXISTS;(2)带比较运算符的子查询
98.select num1 from tb1 where num1>ANY(select num2 from tb2);返回的是tb2表的所有num2列结果,然后将tb1中的num1列的值与之进行比较,只要大于num2列的任意一个数即为符合条件的结果
ALL操作符是必须大于所有的结果
*合并查询结果,UNION关键字,合并时,两个表对应的列数和数据类型必须相同。
99.select column,….from table UNION[ALL] select column,….from table2;使用ALL是不删除重复行,所有返回的行都显示
100.select c.c_id,o.o_num from customers AS c LEFT OUTER JOIN orders AS o on c.c_id=o.c_id;分别为外连接的表去别名,用AS关键字
*语法格式:表名/字段名 [AS] 表别名/字段名
101.select * from fruits where f_name REGEXP ‘^b’;字符^查询f_name字段以字母b为开头的记录
102.select * from fruits where f_name REGEXP ‘y
103.select * from fruits where f_name REGEXP ‘b.a’;字符’.’匹配任意单个字符,位于字母b与a之间
*Mysql中使用REGEXP关键字指定正则表达式的字符匹配模式
104.’*’匹配零个或多个在他前面的字符,例如:’f*n’字符n前面有任意个字符f
105.’+’匹配前面的字符1次或多次,例如:’ba+’匹配以b开头后面紧跟至少有一个a
106.<字符串>匹配包含指定字符串的文本
107.[字符集和]匹配字符集合中的任何一个字符,例如:[xz]匹配x或者z
108.[^]匹配不在括号中的任何字符,例如:[^abc]匹配任何不包含a、b或c的字符串
109.字符串{n,}匹配前面的字符串至少n次,例如:b{2}匹配两个或更多的b
110.字符串{n,m}匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数
插入、更新与删除函数
111.insert into table_name(column_list) values(value_list);为表的所有字段插入数据
112.insert into table_name(column_list) values(value_list1),(value_list2),…(value_list1n);同时插入多条记录
113.insert into table_name1(column_list) select (column_list2) from table_name2 where (condition);将查询结果插入到表中
例如:insert into person(id,name,age,info) select id,name,age,info from person_old;
114.update table_name set column_name1=value1,column_name2=value2,…column_namen=valuen where (condition);更新数据
例如:update fruits set f_name=’student’ where s_id between 101 and 104;
115.delete from table_name[where ];删除数据
例如:delete from fruits where s_id = 101;