1.Mysql登录:mysql –uroot –p –P3306 –h127.0.0.1
2.Mysql退出:mysql > exit; mysql > quit;
3.修改提示符信息:(此命令是将提示符修改为登录名@主机名 数据库名)
mysql> PROMPT \u@\h \d>
root@localhost (none)>use newone;
Database changed
root@localhost newone>
4.关键字大写,数据库名、表名、字段小写。
5.显示当前服务器版本:select VERSION();
6.显示当前日期时间:select NOW();
7.显示当前用户:select USER();
8.规范:
关键字和函数名称全部大写;
数据库名称、表名称、字段名称全部小写;
SQL语句必须以分号结尾;
9.Mysql数据库指令:
创建数据库:CREATE DATABASE 数据库名;
root@localhost newone>CREATE DATABASE IF NOT EXISTS newone;
如果存在newone数据库,则有提示,显示提示信息:SHOW WARNINGS;
举个例子:创建数据库编码格式为gbk,创建完成后修改为utf-8。
mysql> CREATE DATABASE IF NOT EXISTS t2 CHARACTER SET gbk;
mysql> SHOW CREATE DATABASE t2;
mysql> ALTER DATABASE t2 CHARACTER SET = utf8;
mysql> SHOW CREATE DATABASE t2;
删除数据库:drop database <数据库名>;
10.数据类型:是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
整型
数据类型 | 存储范围 | 字节 |
TINYINT | 有符号:-128到127 无符号:0到255 | 1 |
SMALLINT | 有符号:-32768到32767 无符号:0到65535 | 2 |
MEDIUMINT |
| 3 |
INT |
| 4 |
BIGINT |
| 8 |
浮点型
数据类型 | 存储范围 |
FLOAT | 有符号:-128到127 无符号:0到255 |
DOUBLE | 有符号:-32768到32767 无符号:0到65535 |
日期
数据类型 | 存储需求 |
YEAR | 1 |
TIME | 3 |
DATE | 3 |
DATETIME | 8 |
TIMESTAMP | 4 |
字符型
数据类型 | 存储需求 |
CHAR(M) | 定长,例如我们CHAR(ABC),也是占了5个字符 |
VARCHAR(M) | 变长,例如我们CHAR(ABC),只是占了3个字符 |
TINYTEXT | L<2的8次幂 |
TEXT |
|
MEDIUMTEXT |
|
LONGTEXT |
|
ENUM(‘value1’, ‘value2’) | 从几个选项中选择,只能选一个。 |
SET(‘value1’, ‘value2’) | 一组数值的集合,可以任意选择。 |
11.数据表
数据表是数据库最重要的组成部分之一,是其他对象的基础。
首先要通过use命令打开数据库,use newone;
创建数据表:
mysql> CREATE TABLE IF NOT EXISTS tb1(
-> username varchar(20),
-> age TINYINT UNSIGNED,
-> salary FLOAT(8,2) UNSIGNED);
查看数据表(不仅可以查看当前数据库还可以查看其它数据库的数据表是否存在):
SHOW TABLES FROM world;
向数据表中写入记录:
给全部列插入数据
INSERT tb1 VALUES('TOM',25,7863.25);
给其中部分列插入数据
INSERT tb1(username,salary) VALUES ('JOIN',4000.29);
设定数据表是否允许为空,即给数据表添加属性,一列为空,一列不为空:
mysql> CREATE TABLE tb2(
-> username VARCHAR(20) NOT NULL,
-> age TINYINT UNSIGNED NULL);
12.Auto_increment的设置:
自动编号,且必须与主键组合使用;
默认情况下,起始值为1,每次的增量为1;
即此字段一定是数值类型。
13.主键:
一张数据表中只有1个主键
主键自动为NOT NULL
举例子:
mysql> CREATE TABLE tb3(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(30) NOT NULL);
创建属性有主键的表后,插入数据:
INSERT tb3(username) VALUES('AMI');
INSERT tb3(username) VALUES('JOIN');
INSERT tb3(username) VALUES('MARK');
INSERT tb3(username) VALUES('cora');
最后查看表,因为id是主键,且是自增的,所以不用赋值,可以保证id为唯一值。
mysql> select * from tb3;
+----+----------+
| id | username |
+----+----------+
| 1 | JOIN |
| 2 | mark |
| 3 | ami |
| 4 | cora |
+----+----------+
总结:auto_increment必须和主键一起使用,但是主键不一定要和auto_increment一起使用。
14.唯一约束:UNIQUE KEY
唯一约束;唯一约束可以保证记录的唯一性;唯一约束的字段可以为空值(NUll),每张数据表可以存在多个唯一约束。
15.从外部文件导入到数据库中:
从e:\mysql\mydb2.sql中将文件中的SQL语句导入数据库中:
1.从命令行进入mysql,然后用命令CREATE DATABASE mydb2;创建数据库mydb2。
2.退出mysql 可以输入命令exit;或者quit;
3.在CMD中输入下列命令:
c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql
然后输入密码,就OK了。
16.将数据库导出数据文件:
1.将数据库mydb导出到e:\mysql\mydb.sql文件中:
打开开始->运行->输入cmd 进入命令行模式
c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql
然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
2.将数据库mydb中的mytable导出到e:\mysql\mytable.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql
3.将数据库mydb的结构导出到e:\mysql\mydb_stru.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb --add-drop-table >e:\mysql\mydb_stru.sql
17.运算符优先顺序:
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。
在DOS命令下最大化窗口,可以使用wmic指令:单击最大化后,再退出,输入命令quit.
18.聚集函数:
我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,Mysql查询可用于检索数据,以便分析和报表生成。这种类型的检索例子有以下几种。
- 确定表中的行数。
- 获得表中行组的和。
- 找出表列的最大值、最小值和平均值。
重点:使用聚集函数的目的是要汇总信息。而不是实际表数据。
聚集函数如下:
函数 | 说明 |
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列的和 |
AVG()函数举例:
select avg(prod_price) as avg_price from products;
输出prod_price列的平均数。
此avg()函数只能对单独的列操作,不可以对多个列进行操作。
其他函数功能和avg()类似。名不同意义不同。
19.数据分组:
分组是在select语句的group by子句中建立的。使用group by,就不必指定要计算和估值的每个组了。系统会自动完成。
注意:
group by子句可以包含任意数目的列。这是的能对分组进行嵌套,为数据分组提供更细致的控制。
如果在group by 子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算。
Group by子句中列出的每个列都必须是检索列或有效的表达式。如果在select中使用表达式,则必须在group by子句中指定相同的表达式。不能使用别名。
除聚集计算语句外,select语句中的每个列都必须在group by子句中给出。
如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,他们将分为一组。
Group by子句必须出现在where子句之后,order by子句之前。
关系数据库比非关系数据库的可伸缩性要好
20.内联、外联、左联、右联的区别
MySQL联合查询效率较高,以下例子来说明联合查询(内联、左联、右联、全联)的好处:
T1表结构(用户名,密码)
userid(int) usernamevarchar(20) passwordvarchar(20)
1 jack jackpwd
2 owen owenpwd
T2表结构(用户名,密码)
userid(int) jifenvarchar(20) dengjivarchar(20)
1 20 3
3 50 6
第一:内联(inner join)
如果想把用户信息、积分、等级都列出来,那么一般会这样写:
select * from T1, T3 where T1.userid = T3.userid
(其实这样的结果等同于select * from T1 inner join T3 on T1.userid=T3.userid )。
把两个表中都存在userid的行拼成一行(即内联),但后者的效率会比前者高很多,建议用后者(内联)的写法。
SQL语句:
select * from T1 inner join T2 on T1.userid = T2.userid
运行结果
T1.userid username password T2.userid jifen dengji
1 jack jackpwd 1 20 3
第二:左联(left outer join)
显示左表T1中的所有行,并把右表T2中符合条件加到左表T1中;
右表T2中不符合条件,就不用加入结果表中,并且NULL表示。
SQL语句:
select * from T1 left outer join T2 on T1.userid = T2.userid
运行结果
T1.userid username password T2.userid jifen dengji
1 jack jackpwd 1 20 3
2 owen owenpwd NULL NULL NULL
第三:右联(right outer join)。
显示右表T2中的所有行,并把左表T1中符合条件加到右表T2中;
左表T1中不符合条件,就不用加入结果表中,并且NULL表示。
SQL语句:
select * from T1 right outer join T2 on T1.userid = T2.userid
运行结果
T1.userid username password T2.userid jifen dengji
1 jack jackpwd 1 20 3
NULL NULL NULL 3 50 6
第四:全联(full outer join)
显示左表T1、右表T2两边中的所有行,即把左联结果表 + 右联结果表组合在一起,然后过滤掉重复的。
SQL语句:
select * from T1 full outer join T2 on T1.userid = T2.userid
运行结果
T1.userid username password T2.userid jifen dengji
1 jack jackpwd 1 20 3
2 owen owenpwd NULL NULL NULL
NULL NULL NULL 3 50 6
总结,关于联合查询,效率的确比较高,4种联合方式如果可以灵活使用,基本上复杂的语句结构也会简单起来。