MySQL学习——基础知识
2013-06-27 12:26
519 查看
一:基本介绍
MySQL是一款开源的关系数据库管理系统,最早有瑞典的MySQL AB公司开发,2008年被SUN公司收购,2009年,SUN公司被Oracle公司收购。MySQL性能高、成本低、安全稳定,被广泛应用在中小型网站中,随着MySQL的性能不断提高,像维基百科、Google、Facebook等大公司也正在使用MySQL(维基百科现在以迁移到MariaDB)。
MySQL使用C和C++编写,并为多种语言提供了API,支持多线程,充分利用CPU资源,支持多用户,提供TCP/IP/、ODBC和JDBC等等多种数据库连接途径,且提供了用于管理、检查、优化数据库操作的管理工具,可以处理拥有上千万条记录的大型数据库。
MySQL数据库模型:
逻辑模型:表、索引(加速查询操作、减慢写操作)、视图、用户、存储历程(存储过程、存储函数)、触发器(符合某特定条件会触发另外的操作)、事件调度器(在某一时间点执行特定操作)。
物理模型:数据库管理组件(元数据:记录数据库中的文件存储方式)。存储元数据等物理文件的地方是存储引擎。
键:其实也是一种约束,向表中填写数据时不能违反规则。
主键:primary key,非空,不能有相同值,一个表只能有一个主键。
外键:foteign key,表之间建立约束,引用性约束,某一个表中值的取值范围必须符合另一个表。
唯一性约束:unique key,如果不空则值不能相同,一个表可以有多个唯一键。
DBMS数据库管理系统的功能:
管理存储
安全管理
管理元数据
事务管理 (事务:被看成一个整体的多个SQL语句)符合ACID测试即为事务 (A原子性 C一致性 I隔离性 D持久性)
连接管理
性能优化
提供备份和还原
提供接口响应数据的请求和修改
存储引擎实际上就是表类型,是表级别的工具,在同一个数据库中,不同的表可以使用不同的存储引擎,存储引擎就负责将展现给用户的表中的相关数据组织在硬盘空间当中,当用户需要检索的时候,存储引擎到对应的存储空间中取得数据,并逐层向上返回的。存储引擎是实实在在和数据打交道的一个接口,一个层次,非常底层。但是存储引擎决定了关系型数据库的兼容能力的。
常用的存储引擎:
MyISAM 适合多读少写,不支持事务。
InnoDB 5.5以后默认存储引擎,支持事务,支持行级锁
NDB 集群专用
Archive 适合数据长久存放
Memory 使用Memory存储引擎时,mysql本身就是一个内存数据库了,性能好,但不能持久存储数据。
MySQL安装可以使用源码编译安装,也可使用rpm包直接安装,源码安装前面已经介绍。
在mysql安装完之后,要做的第一件事就是为管理员账户设定密码,并删除两个匿名用户;一般mysql安装完成之后会生成三个管理员用户账号,和两个匿名用户账号。
三个管理员用户账号:
root@127.0.0.1
root@localhost
root@hostname
两个匿名用户账号:
‘’@localhost
‘’@hostname
mysql/mysqladmin/mysqldump命令常用的一些选项:
mysql -e 不登陆mysql直接执行命令
例如:#mysql -e 'SHOW DATABASES;'
mysqladmin常用选项:
二:MySQL数据类型
1、常用数据类型
数值型
精确型
整形
TINYINT : 1个字节存储 -128-127
SMALLINT 2
MEDIUMINT 3
INT 4
BIGINT 8
decimal (精确的小数)
numerical
近似型
浮点型
FLOAT 浮点型 单精度
DOUBLE 浮点型 双精度
字符型
char: CHAR(length) 固定长度的字符串类型,255字节符。(存为字符集)
varchar:VARCHAR(length) 可变长度字符串类型,65535字符 。(存为字符集)
binary:BINARY(length) (存为二进制)
varbinary: VARBINARY(length) (存为二进制)
text 字符存储大文本 (存为字符集)
blob 二进制的大文本
TINYBLOB 255byte (存为二进制)
BLOB 64k(存为二进制)
MEDIUMBLOB 16M(存为二进制)
LONGBLOB 4G(存为二进制)
ENUM,SET mysql的内置类型
ENUM 枚举 从多个里面选一个 (要先定义好可用的值。用户要插入的数据只能是事先定义好的数据的一个。如事先定义:Weekday ENUM('Mon','Tus','Wed','Tus','Fri','Sat','Sun'))
SET 从定义好的值中选多个,也可以将数据组合,如'MonTus'
日期时间型
Date 日期,3字节,只表示日期 'XXXX-XX-XX'
Time 时间,3字节只表示时间 'XX:XX:XX'
Datetime 日期时间,8字节,表示日期和时间 'XXXX-XX-XX XX:XX:XX'
Timestamp 时间戳,4字节, 以UTC时间 时间戳 'XXXX-XX-XX XX:XX:XX'
Year (2位|4位)
year(2) 1字节 'XX'
year(4) 1字节 'XXXX'
2、数据常用修饰符
1)、字符串常用修饰符:只修饰字符型,不修饰二进制型
NOT NULL 非空
NULL 空
DEFAULT 默认值
BINARY 字符存储、索引等区分大小写,(默认不区分大小写,使用BINARY后就会区分大小写)
CHARACTER SET 定义字符集
COLLATION 排序规则 每一种字符集至少有一种排序规则
2)、整形常见的修饰符
AUTO_INCREMENT 自动增长
auto_increment_increment= 定义步长,一次增加几,定义在mysql的主配置文件中的mysqld段中。
NOT NULL
NULL
DEFAULT
UNSIGNED 无符号,不包括负数,用于整形
3)、日期时间型的修饰符
NOT NULL
NULL
DEFAULT
三:大小写问题:
1、sql关键字和函数名不区分大小写
2、数据库,表名,视图名字,是否区分大小写取决于操作系统对待文件名是否区分大小写
3、存储过程和存储函数名称不区分大小写,但是触发器的名称区分大小写
4、表别名区分大小写
四:服务器变量:
全局变量:使用GLOBAL修饰
会话变量:只对当前会话有效,退出后失效。使用SESSION修饰
例如:SHOW GLOBAL VARIABLES LIKE 'data%'; 可查看datadir的位置,databases中所有的数据库都在datadir中.
五:用户管理:
mysql中用%表示任意长度的任意字符,_表示任意单个字符,在mysql在,字符串中使用%和_,必须对该字符串加引号。
创建用户:
CREATE USER 'user'@'host' [IDENTIFIED BY 'password'];创建用户 (这样创建用户只具有连接权限)
授权:(ALL PRIVILEGES表示所有权限,*.*表示所有数据库的所有表)
GRANT privilege_list ONdb.tables TO 'user'@'host' [IDENTIFIED BY 'password'] [ REQUIRE ssl] [WITH GRANT OPTION]; 授权 (ON 后面可加的限定符有TABLE/PROCUDURE(存储过程)/FUNCTION);REQUIRE ssl;基于ssl的方式来识别用户,远程连接。
1、创建表:
创建表的三种方式:
1)、直接创建(通过定义字段的信息创建)
CREATE TABLE tbs ();
table options:
ENGINE = engine_name
AUTO_INCREMENT = value 从value开始计数
CHARACTER SET = char-set
DATE DERECTORY =指定存储数据的目录
DELAY_KEY_WRITE = {0 | 1} 延迟键写入 //使用索引时会使表的写入速度减慢,使用DELAY_KEY_WRITE不会立即更新索引,而是过一段时间更新
COLLATE = collate 排序
INDEX (字段) 索引
COMMENT='' 附加信息
2)、通过从其他表中检索数据后来创建表(检索过来的数据并不能附带原表中关于字段属性的定义)
CREATE TABLE tbs () SELECT clause;
例子: CREATE TABLE tb1 SELECT * FROM tb2 WHERE UIN < 3;
3)、以某表为模板创建表 (不复制数据,只复制表定义)
CREATE TABLE tbs LIKE old_tbs;
显示创建表时所用的命令:SHOW CREATE TABLE tbs;
2:删除表:
删除表中的内容,而定义的规则不变:
DELETE FROM tbs;
清空表(删除表中的内容)并重置计数器:
TRUNCATE tbs
删除表
DROP TABLE tbl_name;
3、向表中插入数据:
INSERT INTO
方法1:
INSERT INTO tb_name [(col1,col2,...)] VALUES|VALUE (val1, val2, ...)
例子:INSERT INTO classes (Name,Numogstu) VALUES ('class2',31),('class3',31); //插入的value是字符型时要用引号引起来
方法2:
INSERT INTO tb_name SET col1=val1, col2=val2, ...
方法3:
INSERT INTO tb_name SELECT *FROM tb2 [WHERE ...]
4、altering Tables 修改表:修改的是表所定义的属性信息。
新增字段 add
ALTER TABLE tb_name ADD column_name column_defination [FIRST | AFTER column];
ALTER TABLE tb_name ADD (col1 column_defi, col2 column_defi);
修改字段 modify (字段属性)
ALTER TABLE tb_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name];
改变字段 CHANGE(字段名称和属性)
ALTER TABLE tb_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name];
删除字段
ALTER TABLE tb_name DROP [COLUMN] col_name;
改表名
ALTER TABLE tb_name RENAME [TO] new_tbl_name;
RENAME TABLE old_table TO backup_table, new_table TO old_table;
例如:RENAME TABLE tb1 TO tb2;
5、select查询:
1)、SELECT:
SELECT values_to_display 查询值
加AS,给字段取别名 >SELECT Name AS student FROM students
DISTINCT 只显示不重复的值
FROM table_name 从哪里查
WHERE expression 限定条件
限定条件可以做算术运算
+-*/% = , <>不等于,<=>, < , >, <=, >=
BETWEEN...AND... , IS NULL, IS NOT NULL, IN后面跟一个集合,例如:IN(19,20,30)
LIKE(%任意长度任意字符,_ 任意单个字符)
REGEXP aka RLIKE(支持正则表达式查询),
NOT aka !
AND aka &&
OR aka ||
XOR
GROUP BY how_to_group 查询结果分组(聚合函数)
COUNT() 计数
MAX() 最大值
MIN() 最小值
AVG() 平均值
例如:SELECT COUNT(*) AVG(age),MAX(age) FROM students GROUP BY gender; // COUNT(*)表示统计个数
HAVING expression 对GROUP BY的结果在做条件过滤
例如:SELECT AVG(age),MAX(age) FROM students GROUP BY gender HAVING AVG(age) >=20;
ORDER BY how_to_sort 对查找的结果进行排序 ////降序时加DESC
LIMIT row_count; 对查找的结果做限定(排完序后的多少个)
LIMIT m,n 对排完序之后的跳过(偏移)m个,在取n个。
2)、联结查询:
交叉联结 (笛卡尔乘积) 避免使用
内联结(Inner Jion):通过匹配两个表之间的等值关系,建立的联结
例如:SELECT * FROM student,cources WHERE students.CID1=cources.CID;
外联结(Outer Jion) 两个表之间不是等值关系,一个表中可能没有值。
左外 SELECT...FROM...LEFT JION...ON... 以左表为基准,右表没有就显示为空。 (不需要where)
例如:SELECT name,cname FROM student LEFT JION courses ON student.CID1=courses.CID
右外 SELECT...FROM...RIGHT JION...ON... 以右表为基准,左表可能为空。(不需要where)
完全外
自联结 (SELF JION): 同一个表的两个字段建立联系。
例如:SELECT s1.name,s2.name FROM students AS s1,students AS s2 WHERE s1.TID=s2.SID
联合(UNION):将两个字段的查询结果联结在一起(也就是将两个查询语句用UNION联合起来)
子查询:让一个查询基于另一个查询的结果进行查询
例如:SELECT name,age FROM student WHERE age > (SELECT AVG(age) FROM STUDENT);
6、创建索引:
CREATE INDEX 索引名称 ON 表名(列名);
例如:mysql>CREATE TABLE tb1 (SID INT UNSIGNED,NAME VARCHAR(50),INDEX(SID)); 表示为SID字段创建索引
显示索引:SHOW INDEX FROM tbl_name [FROM db_name];
删除索引: DROP INDEX index_name ON tbl_name ;
EXPLAIN 显示操作是否使用索引。
例如:mysql>EXPLAIN SELECT * FROM tb WHERE name LIKE "stu%'\G 即可显示本次查询是否使用了索引。
7、视图:
创建视图:CREATE VIEW view_name AS select_statemen; select_statement表示SELECT语句,将SELECT语句查询得到的表建立为一个视图。
删除视图:DROP VIEW view_name
显示创建view的命令:SHOW CREATE VIEW view_name
虚表中插入数据时查看基表是否允许,但mysql中不允许向视图中插入数据。
对视图的查询就是一种子查询,在实际操作中英避免子查询。
MySQL是一款开源的关系数据库管理系统,最早有瑞典的MySQL AB公司开发,2008年被SUN公司收购,2009年,SUN公司被Oracle公司收购。MySQL性能高、成本低、安全稳定,被广泛应用在中小型网站中,随着MySQL的性能不断提高,像维基百科、Google、Facebook等大公司也正在使用MySQL(维基百科现在以迁移到MariaDB)。
MySQL使用C和C++编写,并为多种语言提供了API,支持多线程,充分利用CPU资源,支持多用户,提供TCP/IP/、ODBC和JDBC等等多种数据库连接途径,且提供了用于管理、检查、优化数据库操作的管理工具,可以处理拥有上千万条记录的大型数据库。
MySQL数据库模型:
逻辑模型:表、索引(加速查询操作、减慢写操作)、视图、用户、存储历程(存储过程、存储函数)、触发器(符合某特定条件会触发另外的操作)、事件调度器(在某一时间点执行特定操作)。
物理模型:数据库管理组件(元数据:记录数据库中的文件存储方式)。存储元数据等物理文件的地方是存储引擎。
键:其实也是一种约束,向表中填写数据时不能违反规则。
主键:primary key,非空,不能有相同值,一个表只能有一个主键。
外键:foteign key,表之间建立约束,引用性约束,某一个表中值的取值范围必须符合另一个表。
唯一性约束:unique key,如果不空则值不能相同,一个表可以有多个唯一键。
DBMS数据库管理系统的功能:
管理存储
安全管理
管理元数据
事务管理 (事务:被看成一个整体的多个SQL语句)符合ACID测试即为事务 (A原子性 C一致性 I隔离性 D持久性)
连接管理
性能优化
提供备份和还原
提供接口响应数据的请求和修改
存储引擎实际上就是表类型,是表级别的工具,在同一个数据库中,不同的表可以使用不同的存储引擎,存储引擎就负责将展现给用户的表中的相关数据组织在硬盘空间当中,当用户需要检索的时候,存储引擎到对应的存储空间中取得数据,并逐层向上返回的。存储引擎是实实在在和数据打交道的一个接口,一个层次,非常底层。但是存储引擎决定了关系型数据库的兼容能力的。
常用的存储引擎:
MyISAM 适合多读少写,不支持事务。
InnoDB 5.5以后默认存储引擎,支持事务,支持行级锁
NDB 集群专用
Archive 适合数据长久存放
Memory 使用Memory存储引擎时,mysql本身就是一个内存数据库了,性能好,但不能持久存储数据。
MySQL安装可以使用源码编译安装,也可使用rpm包直接安装,源码安装前面已经介绍。
在mysql安装完之后,要做的第一件事就是为管理员账户设定密码,并删除两个匿名用户;一般mysql安装完成之后会生成三个管理员用户账号,和两个匿名用户账号。
三个管理员用户账号:
root@127.0.0.1
root@localhost
root@hostname
两个匿名用户账号:
‘’@localhost
‘’@hostname
为用户添加密码: 方法一: #mysqladmin -u root password 'new-passwd' #mysqladmin -u root -h this_host_name password 'new-passwd' 方法二: mysql> SET PASSWORD FOR 'root'@'host_name'=PASSWORD ('new_passwd') 方法三: mysql> UPDATE mysql.user SET Password=PASSWORD(‘new_passwd') WHERE User='root' and Host='127.0.0.1'; mysql> FLUSH PRIVILEGES; 匿名用户删除: mysql>DROP USER ''@localhost; mysql> FLUSH PRIVILEGES;
mysql/mysqladmin/mysqldump命令常用的一些选项:
帮助信息: -? -I --help ********************************************************** (单字符后面不带空格) --user,-u 指定用户访问mysqld --host,-h 指定服务器的名字 --password,-p --protocol 指定连接协议(tcp/socket/pipe/memory) 使用--protocol socket时,本地客户端是通过/tmp/mysql.sock(sock文件位置可能不同)连接本地mysqld服务 --port 远程服务器的连接端口 --socket -D db_name 直接使用某个数据库作为默认数据库 --datebase=... --compress 数据在服务器端和客户端之间压缩传输 --default-character-set=charset_name 指定字符集 -V 显示版本号 -v 命令执行时显示详细信息 --ssl-ca=/path/to/ssl_ca_file 证书存放位置 (为了验证对方的证书) --ssl-capath=/path/to/ca_dir 证书目录 --ssl-cert=/path/to/cert_file //自己的证书 --ssl-cipher=cipher_list 加密方式 --ssl-key=/path/to/key_file 自己的私钥 --ssl-verify-server-cert 验证服务器证书
mysql -e 不登陆mysql直接执行命令
例如:#mysql -e 'SHOW DATABASES;'
mysqladmin常用选项:
create 创建数据库 drop 删除数据库 debug 用于输出调试信息 status 显示全局变量和他的值 --sleep n 每个n秒显示一次 --count n 一共显示n次 例如:#mysqladmin --sleep 3 --count 3 status extended-status 显示所有系统变量和值/运行状态属性信息 flush-hosts 清空hosts内部信息 flush-logs 做二进制日志滚动 flush-privileges 刷新 flush-status 重新开始计数 flush-tables 关闭表 flush-threads 重置线程缓存池 kill 结束某个客户端线程 processlist 列举所有的进程和线程 password 为某用户设置密码 ping 查看是否处于运行状态 reload flush-privilege refresh flush-hosts&flush-logs shutdown 关闭指定mysql服务器 start-slave 启动从服务器 stop-slave variables 显示全局变量
二:MySQL数据类型
1、常用数据类型
数值型
精确型
整形
TINYINT : 1个字节存储 -128-127
SMALLINT 2
MEDIUMINT 3
INT 4
BIGINT 8
decimal (精确的小数)
numerical
近似型
浮点型
FLOAT 浮点型 单精度
DOUBLE 浮点型 双精度
字符型
char: CHAR(length) 固定长度的字符串类型,255字节符。(存为字符集)
varchar:VARCHAR(length) 可变长度字符串类型,65535字符 。(存为字符集)
binary:BINARY(length) (存为二进制)
varbinary: VARBINARY(length) (存为二进制)
text 字符存储大文本 (存为字符集)
blob 二进制的大文本
TINYBLOB 255byte (存为二进制)
BLOB 64k(存为二进制)
MEDIUMBLOB 16M(存为二进制)
LONGBLOB 4G(存为二进制)
ENUM,SET mysql的内置类型
ENUM 枚举 从多个里面选一个 (要先定义好可用的值。用户要插入的数据只能是事先定义好的数据的一个。如事先定义:Weekday ENUM('Mon','Tus','Wed','Tus','Fri','Sat','Sun'))
SET 从定义好的值中选多个,也可以将数据组合,如'MonTus'
日期时间型
Date 日期,3字节,只表示日期 'XXXX-XX-XX'
Time 时间,3字节只表示时间 'XX:XX:XX'
Datetime 日期时间,8字节,表示日期和时间 'XXXX-XX-XX XX:XX:XX'
Timestamp 时间戳,4字节, 以UTC时间 时间戳 'XXXX-XX-XX XX:XX:XX'
Year (2位|4位)
year(2) 1字节 'XX'
year(4) 1字节 'XXXX'
2、数据常用修饰符
1)、字符串常用修饰符:只修饰字符型,不修饰二进制型
NOT NULL 非空
NULL 空
DEFAULT 默认值
BINARY 字符存储、索引等区分大小写,(默认不区分大小写,使用BINARY后就会区分大小写)
CHARACTER SET 定义字符集
COLLATION 排序规则 每一种字符集至少有一种排序规则
2)、整形常见的修饰符
AUTO_INCREMENT 自动增长
auto_increment_increment= 定义步长,一次增加几,定义在mysql的主配置文件中的mysqld段中。
NOT NULL
NULL
DEFAULT
UNSIGNED 无符号,不包括负数,用于整形
3)、日期时间型的修饰符
NOT NULL
NULL
DEFAULT
三:大小写问题:
1、sql关键字和函数名不区分大小写
2、数据库,表名,视图名字,是否区分大小写取决于操作系统对待文件名是否区分大小写
3、存储过程和存储函数名称不区分大小写,但是触发器的名称区分大小写
4、表别名区分大小写
四:服务器变量:
全局变量:使用GLOBAL修饰
会话变量:只对当前会话有效,退出后失效。使用SESSION修饰
例如:SHOW GLOBAL VARIABLES LIKE 'data%'; 可查看datadir的位置,databases中所有的数据库都在datadir中.
五:用户管理:
mysql中用%表示任意长度的任意字符,_表示任意单个字符,在mysql在,字符串中使用%和_,必须对该字符串加引号。
创建用户:
CREATE USER 'user'@'host' [IDENTIFIED BY 'password'];创建用户 (这样创建用户只具有连接权限)
授权:(ALL PRIVILEGES表示所有权限,*.*表示所有数据库的所有表)
GRANT privilege_list ON
CREATE | DDL:数据定义语言 关于数据库对象操作的语句 |
DROP | |
ALTER | |
INSERT INTO | DML:数据操作语言 用于修改表中数据的,操作数据本身,而非操作数据库对象. |
UPDATE...SET | |
REPLACE...INTO | |
DELETE FROM | |
TRUNCATE |
创建表的三种方式:
1)、直接创建(通过定义字段的信息创建)
CREATE TABLE tbs ();
table options:
ENGINE = engine_name
AUTO_INCREMENT = value 从value开始计数
CHARACTER SET = char-set
DATE DERECTORY =指定存储数据的目录
DELAY_KEY_WRITE = {0 | 1} 延迟键写入 //使用索引时会使表的写入速度减慢,使用DELAY_KEY_WRITE不会立即更新索引,而是过一段时间更新
COLLATE = collate 排序
INDEX (字段) 索引
COMMENT='' 附加信息
2)、通过从其他表中检索数据后来创建表(检索过来的数据并不能附带原表中关于字段属性的定义)
CREATE TABLE tbs () SELECT clause;
例子: CREATE TABLE tb1 SELECT * FROM tb2 WHERE UIN < 3;
3)、以某表为模板创建表 (不复制数据,只复制表定义)
CREATE TABLE tbs LIKE old_tbs;
显示创建表时所用的命令:SHOW CREATE TABLE tbs;
2:删除表:
删除表中的内容,而定义的规则不变:
DELETE FROM tbs;
清空表(删除表中的内容)并重置计数器:
TRUNCATE tbs
删除表
DROP TABLE tbl_name;
3、向表中插入数据:
INSERT INTO
方法1:
INSERT INTO tb_name [(col1,col2,...)] VALUES|VALUE (val1, val2, ...)
例子:INSERT INTO classes (Name,Numogstu) VALUES ('class2',31),('class3',31); //插入的value是字符型时要用引号引起来
方法2:
INSERT INTO tb_name SET col1=val1, col2=val2, ...
方法3:
INSERT INTO tb_name SELECT *FROM tb2 [WHERE ...]
4、altering Tables 修改表:修改的是表所定义的属性信息。
新增字段 add
ALTER TABLE tb_name ADD column_name column_defination [FIRST | AFTER column];
ALTER TABLE tb_name ADD (col1 column_defi, col2 column_defi);
修改字段 modify (字段属性)
ALTER TABLE tb_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name];
改变字段 CHANGE(字段名称和属性)
ALTER TABLE tb_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name];
删除字段
ALTER TABLE tb_name DROP [COLUMN] col_name;
改表名
ALTER TABLE tb_name RENAME [TO] new_tbl_name;
RENAME TABLE old_table TO backup_table, new_table TO old_table;
例如:RENAME TABLE tb1 TO tb2;
5、select查询:
1)、SELECT:
SELECT values_to_display 查询值
加AS,给字段取别名 >SELECT Name AS student FROM students
DISTINCT 只显示不重复的值
FROM table_name 从哪里查
WHERE expression 限定条件
限定条件可以做算术运算
+-*/% = , <>不等于,<=>, < , >, <=, >=
BETWEEN...AND... , IS NULL, IS NOT NULL, IN后面跟一个集合,例如:IN(19,20,30)
LIKE(%任意长度任意字符,_ 任意单个字符)
REGEXP aka RLIKE(支持正则表达式查询),
NOT aka !
AND aka &&
OR aka ||
XOR
GROUP BY how_to_group 查询结果分组(聚合函数)
COUNT() 计数
MAX() 最大值
MIN() 最小值
AVG() 平均值
例如:SELECT COUNT(*) AVG(age),MAX(age) FROM students GROUP BY gender; // COUNT(*)表示统计个数
HAVING expression 对GROUP BY的结果在做条件过滤
例如:SELECT AVG(age),MAX(age) FROM students GROUP BY gender HAVING AVG(age) >=20;
ORDER BY how_to_sort 对查找的结果进行排序 ////降序时加DESC
LIMIT row_count; 对查找的结果做限定(排完序后的多少个)
LIMIT m,n 对排完序之后的跳过(偏移)m个,在取n个。
2)、联结查询:
交叉联结 (笛卡尔乘积) 避免使用
内联结(Inner Jion):通过匹配两个表之间的等值关系,建立的联结
例如:SELECT * FROM student,cources WHERE students.CID1=cources.CID;
外联结(Outer Jion) 两个表之间不是等值关系,一个表中可能没有值。
左外 SELECT...FROM...LEFT JION...ON... 以左表为基准,右表没有就显示为空。 (不需要where)
例如:SELECT name,cname FROM student LEFT JION courses ON student.CID1=courses.CID
右外 SELECT...FROM...RIGHT JION...ON... 以右表为基准,左表可能为空。(不需要where)
完全外
自联结 (SELF JION): 同一个表的两个字段建立联系。
例如:SELECT s1.name,s2.name FROM students AS s1,students AS s2 WHERE s1.TID=s2.SID
联合(UNION):将两个字段的查询结果联结在一起(也就是将两个查询语句用UNION联合起来)
子查询:让一个查询基于另一个查询的结果进行查询
例如:SELECT name,age FROM student WHERE age > (SELECT AVG(age) FROM STUDENT);
6、创建索引:
CREATE INDEX 索引名称 ON 表名(列名);
例如:mysql>CREATE TABLE tb1 (SID INT UNSIGNED,NAME VARCHAR(50),INDEX(SID)); 表示为SID字段创建索引
显示索引:SHOW INDEX FROM tbl_name [FROM db_name];
删除索引: DROP INDEX index_name ON tbl_name ;
EXPLAIN 显示操作是否使用索引。
例如:mysql>EXPLAIN SELECT * FROM tb WHERE name LIKE "stu%'\G 即可显示本次查询是否使用了索引。
7、视图:
创建视图:CREATE VIEW view_name AS select_statemen; select_statement表示SELECT语句,将SELECT语句查询得到的表建立为一个视图。
删除视图:DROP VIEW view_name
显示创建view的命令:SHOW CREATE VIEW view_name
虚表中插入数据时查看基表是否允许,但mysql中不允许向视图中插入数据。
对视图的查询就是一种子查询,在实际操作中英避免子查询。
相关文章推荐
- MySQL学习笔记 1 - 基础知识
- mysql学习之基础知识
- Mysql基础知识学习(转)
- MySql基础知识学习笔记
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- mysql--SQL编程(基础知识) 学习笔记1
- MySQL学习笔记1——数据库与MySQL基础知识
- MySQL基础知识学习
- MySQL的日志基础知识及基本操作学习教程
- mysql学习笔记之基础知识
- MySql入门教程mysql基础知识学习实例讲解
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- MySQL+PHP学习,从最基础的知识开始(PHP+MySQL安全事务)
- MySql表信息基础知识学习
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- MySQL的日志基础知识及基本操作学习教程
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- mysql基础知识学习
- MySQL 数据库学习 基础知识
- mysql 学习基础知识汇总