MySQL常用命令

***prompt 提示符 –修改提示符
\D 完整的日期
\d 当前数据库
\h 服务器名称
\u 当前用户
如:prompt \u@\h \d>


* select version(); –显示当前MySQL版本

* select now(); –显示当前日期时间

* select user(); –显示当前用户

* select database(); –显示当前打开的数据库

* create {database | schema} [if not exists] db_name; –创建数据库

* create {database | schema} [if not exists] db_name [default]
character set [=] charset_name; –以特定编码方式创建数据库

* show warnings; –显示警告信息

* show create database db_name; –查看数据库创建信息

* show create table tb_name; –查看数据表的创建信息

* alter {database | schema} [db_name] [default] character set [=] charset_name; –修改数据库编码方式

* drop database db_name; –删除数据库

* use db_name –打开数据库

* show databases; –显示当前服务器下所有数据库

* show tables [from db_name]; –查看当前或其他数据库的所有表

* show columns from tb_name; –查看数据表结构

* insert [into] tb_name [(col1,col2,…)] values(val1,val2,…); –插 入

* show indexes from tb_name\G; –显示索引(\G:以网格方式呈现)

* select row_count() ; –查看前面的操作影响的行数

添加删除约束

外键约束的参照操作
1.cascade:从父表删除或更新时自动删除或更新子表中匹配的行
2.set null:从父表更新或删除行时,设置子表中匹配的外键列为null, 但必须保证该列没有约束为not null
3.restrict:拒绝对父表的删除或更新操作
4.no action:在MySQL中与restrict相同

* alter table tb_name add [constraint [symbol]] primary key [index_type] (index_col_name,…); –添加主键约束

* alter table tb_name add [constraint [symbol]] unique [index|key] [index_name] index_type; –添加唯一约束

* alter table tb_name add [constraint [symbol]] foreign key index_name reference_definition; –添加唯外键约 束

* alter table tb_name alter [column] col_name {set default val | drop default}; –添加/删除默认约束

* alter table tb_name drop primary key; –删除主键约束

* alter table tb_name drop {index | key} index_name; –删除唯一约束

* alter table tb_name drop foreign key fk_symbol; –删除外键约束

表结构修改

* alter table tb_name add [column] col_name column_definition [first | after col1_name] –添加列

* alter table tb_name drop cli_name; –删除列

修改数据表
* ALTER TABLE tb_name MODIFY [COLUMN] col_name col_definition [FIRST|AFTER col1_name] –修改列定义

* ALTER TABLE tb_name CHANGE [COLUMN] old_col_name new_col_name col_definition [FIRST|AFTER col1_name] –修改列名称及定义

* ALTER TABLE tb_name RENAME [AS|TO] new_tb_name; –修改表名
* RENAME TABLE tb_name TO new_tb_name[,tb2_name TO new_tb2_name…] –修改表名

记录操作(增删查改)
INSERT插入操作
1、INSERT [INTO] tb_name [(col_name,…)] {VALUES|VALUE}({expr| DEFAULT},…);

2、INSERT [INTO] tb_name SET col_name={expr|DEFAULT},…;

3、

UPDATE更新记录
UPDATE tb_name SET …WHERE…

删除记录
DELETE FROM tb_name WHERE…

限制返回数量
LIMIT [offset,] row_count

子查询
1、使用比较运算符的子查询
=、>、<、>=、<=、<>、!=、<=>

2、使用any、some、all修饰的比较运算符

3、由[not] in/exists引发的子查询

多表更新
1、参照其他表更新本表
使用内连接
UPDATE tb1_name INNER JOIN tb2_name ON 连接条件 SET 更新操作;

2、创建数据表的同时将查询结果写入数据表
CREATE TABLE tb_name
(create_definition)
select_statement;
例:
create table A (
id smallint unsigned primary key auto_increment ,
name varchar(40) not null )
select name from B ; –A表和B表字段名字(name)要相同

表的连接
语法结构:
tb1_name
{ [inner|cross] join | { left|right } [outer] join }
tb2_name
on 连接条件

内连接:仅显示左表及右表符合连接条件的记录
左外连接:显示左表的全部记录及右表符合连接条件的记录
右外连接:显示右表的全部记录及左表符合连接条件的记录

函数
一、字符函数
1、concat() –字符连接
select concat(‘my’,’-‘,’sql’);

2、concat_ws() –使用指定的分隔符进行字符连接
concat_ws(‘|’,’A’,’B’,’C’)

3、format() –数字格式化
select format(12345.678,2) 结果输出:12,345.68

4、lower() –转换成小写字母
lower(‘MySQL’);

5、upper() –转换成大写字母
upper(‘MySQL’)

6、left() –获取左侧字符
select left(‘MySQL’,2); 结果输出:My

7、right() –获取右侧字符
select right(‘MySQL’,2); 结果输出:QL

8、length(0 –获取字符串长度
select length(‘My SQL’); 输出结果:6

9、ltrim() –删除前导空格
ltrim(’ mysql’)

10、rtrim() –删除后续空格
rtrim(‘mysql ‘)

11、trim() –删除前导和后续空格
trim(’ mysql ‘)
–还可以删除特定字符
select trim(leading ‘?’ from ‘??my?sql???’); 输出结果:my?sql???
select trim(trailing ‘?’ from ‘??my?sql???’); 输出结果:??my?sql
select trim(both ‘?’ from ‘??my?sql???’); 输出结果:my?sql

12、substring() –字符串截取
select substring(’lanxiaoye’ , 4 , 3); 输出结果:xia
select substring(’lanxiaoye’ ,4); 输出结果:xiaoye
select substring(’lanxiaoye’ ,-2); 输出结果:ye
select substring(’lanxiaoye’ ,-3 , 2); 输出结果:oy

13、[not] like –模式匹配
–%代表任意个字符
–_代表任意一个字符
select ‘mysql’ like ‘m%’ ; 输出结果:1
select ‘mysql’ like ‘%s%’ ; 输出结果:1
select ‘my%sql’ like ‘%1%%’ escape ‘1’ ; 输出结果:1

14、replace() –字符串替换
replace(‘??my?sql???’ , ‘?’ , ‘**’)

二、数值运算符和函数

1、ceil() –进一取整,向上取整
select ceil(3.01); 输出结果:4

2、floor() –舍一取整,向下取整
select ceil(3.99); 输出结果:3

3、div –整数除法
select 3 / 4; 输出结果:0.7500
select 3 div 4; 输出结果:0

5、mod –取余(取模)
select 5.3 % 3; 输出结果:2.3
select 5 mod 3; 输出结果:2

6、power() –幂运算
select power(3,2); –输出结果:9

7、round() –四舍五入
select round(3.674,1); –输出结果:3.7

8、truncate() –数字截取
select truncate(127.89 , 1); 输出结果:127.8
select truncate(127.89 , 0); 输出结果:127
select truncate(127.89 , -1); 输出结果:120

三、比较运算符和函数

1、[not] between … and … –[不]在范围内
select 10 between 1 and 30; 输出结果:1

2、[not] in() –在不在列出值范围内
select 10 in(1,10,15,30); 输出结果:1

3、is [not] null –是否为空

四、日期时间函数

1、now() –当前日期和时间
select now();

2、curdate() –当前日期
select curdate();

3、curtime() –当前时间
select curtime();

4、date_add() –日期变化
select date_add(‘2016-8-26’ , interval , 300 day);
select date_add(‘2016-8-26’ , interval , 3 year);
select date_add(‘2016-8-26’ , interval , -3 week);

5、datediff() –日期差值
select datediff(‘2015-8-26’ , ‘2016-8-26’); 输出结果:-366

6、date_format() –日期格式化

五、信息函数

1、connection_id() –连接ID
select connection_id();

2、database() –当前数据库
select database();

3、last_insert_id() –最后插入记录的id号
select last_insert_id();

4、user() –当前用户
select user();

5、version() –版本信息
select version();

六、聚合函数

1、avg() –平均值

2、count() –计数

3、max() –最大值

4、min() –最小值

5、sum() –求和

七、加密函数

1、md5() –信息摘要算法
select md5(‘mysql’);

2、password() –密码算法
select password(‘mysql’);

自定义函数
创建自定义函数
CREATE FUNCTION function_name
RETURNS
{STRING | INTEGER | REAL | DECIMAL}
routine_body

关于函数体
1、函数体由合法的sql语句构成;
2、函数体可以是简单的select或insert语句;
3、函数体如果为复合结构则使用begin…end语句;
4、复合结构可以包含声明、循环、控制结构;

创建不带参数的自定义函数
例子:
CREATE FUNCTION f1() RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW() , ‘%Y年%m月%d日 %H点:%i分:%s秒’);

调用:select f1();

创建带参数的自定义函数
例子:
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED , num2 SMALLINT UNSIGNED)
RETURNS FL0AT(10 , 2) UNSIGNED
RETURN (num1 + num2) / 2 ;

调用:select f2(10 , 15);

创建具有复合结构函数体的自定义函数
例子:
DELIMITER //
CREATE FUNCTION f3(username VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT test(username) VALUES(username);
RETURN LAST_INSERT_ID();
END
//

调用:select f3(‘Tom’);

删除函数:
DROP FUNCTION [IF EXISTS] function_name;

存储过程
创建存储过程
CREATE
[DEFINER = { USER | CURRENT_USER }] –省略则默认为当前用户
PROCEDURE sp_name ( [ proc_parameter[,…] ] )
[ characteristic … ] routine_body

proc_parameter:
[ IN | OUT | INOUT ] param_name type

过程体跟函数体基本一致

创建简单的不带参数的存储过程
create procedure sp1() select version() ;

调用:call sp1 ;
call sp1() ;

创建带IN参数的存储过程
DELIMITER //
CREATE PROCEDURE removeUserById( IN uid INT UNSIGNED )
BEGIN
DELETE FROM users WHERE id = uid ; –删除id = uid 的记录
END
//
DELIMITER ;

调用:call removeUserById(10) ;

//删除指定id的记录并返回剩余的记录数
DELIMITER //
CREATE PROCEDURE removeUserAndReturnNums( IN uid INT UNSIGNED , OUT num INT UNSIGNED )
BEGIN
DELETE FROM users WHERE id = uid ;
SELECT count( id ) from users INTO num ;
END
//
DELIMITER ;

调用:call removeUserAndReturnNums( 22 , @nums ) ;
select @nums ;

SET @a = 7 ; –创建变量

//创建带有多个OUT类型参数的存储过程
//根据年龄age字段删除记录并返回删除的用户数和剩余的用户数
DELIMITER //
CREATE PROCEDURE pro1( IN p_age SMALLINT UNSIGNED , OUT del_num SMALLINT UNSIGNED , OUT user_num SMALLINT UNSIGNED )
BEGIN
DELETE FROM users WHERE age = p_age ;
SELECT ROW_COUNT() INTO del_num ;
SELECT COUNT( id ) FROM users INTO user_num ;
END
DELIMITER ;

DROP PROCEDURE [IF EXISTS] sp_name ; –删除存储过程

存储过程可以返回多个值,而函数只能有一个返回值
存储过程一般独立的执行,而函数可以作为其他sql语句的组成部分来出现

存储引擎
MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术成为存储引擎。
每一种存储引擎使用不用的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

MySQL支持的存储引擎
-MyISAM
-InnoDB
-Memory
-CSV
-Archive

* 并发控制:

      当多个连接对记录进行修改时保证数据的一致性和完整性。


* 锁

      -共享锁(读锁):在同一时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化。
      -排它锁(写锁):任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或写锁操作。


* 锁颗粒

      -表锁:是一种开销最小的锁策略
      -行锁:是一种开销最大的锁策略
特点 MyISAM InnoDB Memory Archive
存储限制 256TB 64TB
事务安全 - 支持 - -
支持索引 支持 支持 支持 -
锁颗粒 表锁 行锁 表锁 行锁
数据压缩 支持 - - 支持
支持外键 - 支持 - -

修改存储引擎的方法

* 通过修改MySQL配置文件实现

      -default-storage-engine = engine


* 通过创建数据表命令实现

      -CREATE TABLE tb_name(
       ...
       ) ENGINE = engine ;


* 通过修改数据表命令实现

      -ALTER TABLE tb_name ENGINE [=] engine_name ;

你可能感兴趣的:(数据库)