MySQL命令

数据库的操作可以分为两大类,表数据变更(DML)和表结构变更(DDL)。表数据变更就是增、删、改、查。表结构变更就是创建数据表,修改表结构等。接下来主要从这两方面来总结MySQL常用的操作语法。MySQL里对语法的关键词不敏感,因此本文中存在大小写混用的情况。

数据定义语言 DDL

定义数据库

创建数据库:create database <数据库名称>

删除数据库:drop database <数据库名称>

列出所有管理的数据库:show databases

切换到指定的数据库:use <数据库名称>

列出某数据库中的所有表:show tables

显示数据库被创建时的语言:show create database <数据库名称>

定义数据表

创建数据表

创建数据表的基本语法结构为, create table table_name (column_name column_type)

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL DEFAULT '',
   `runoob_author` VARCHAR(40) NOT NULL DEFAULT '',
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` ),
   KEY ID_TITLE (`runoob_title`, `runoob_author`) 
   )ENGINE=InnoDB CHARSET=utf8;
复制代码
  1. 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错;
  2. AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1;
  3. PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔;
  4. ENGINE 设置存储引擎;
  5. CHARSET 设置编码, 常用的编码格式有utf8、utf8mb4、gbk;
  6. UNIQUE 用限定建立索引的索引为唯一索引;

删除数据表

drop table <数据表名称>

查询表相关信息

查询建表语言:SHOW CREATE TABLE TABLE_NAME

查询索引信息:show index from <table name>

查询表字段:show columns from <table name>DESCRIBE tableName

修改表结构

创建一个表t1,然后在其基础上进行表结构的变更,表t1如下:`CREATE TABLE t1 (a INTEGER, b CHAR(10));`

# 添加字段c,d和e(ADD)
ALTER TABLE t1 ADD c bigint(20) COMMENT 'xxx',
ADD d bigint(20) NOT NULL COMMENT 'xxx',
ADD e bigint(20) NOT NULL COMMENT 'xxx';

# 将表名重命名为t2(RENAME) 
ALTER TABLE t1 RENAME t2

# 删除字段b(DROP)
ALTER TABLE t2 DROP COLUMN b;

# 修改字段b类型为VARCHAR(MODIFY)
ALTER TABLE t2 MODIFY COLUMN b VARCHAR(255) NOT NULL DEFAULT '';

# 修改字段名a为ach(CHANGE)
ALTER TABLE t2 CHANGE a ach BIGINT(20) NOT NULL;

# 添加一个名为key_a的索引
ALTER TABLE t2 ADD INDEX key_a(a);

# 删除名为key_a的索引
ALTER TABLE t2 DROP INDEX key_a
复制代码

数据操纵语言 DML

查询数据

SELECT column_name1, column_name2
FROM table_name
[WHERE Clause] [ORDER BY column_name1 DESC]
[LIMIT N][ OFFSET M]

复制代码
  1. 根据过滤条件查询表中的一列或者多列或者全部列的数据, SELECT column_name1,column_name2 FROM table_name WHERE column_name1=xxx;其中过滤条件操作符有:=,<>,!=,<,<=,>,>=,BETWEEN AND,IS NULL;
  2. 可以使用星号(*)来代替字段,SELECT语句会返回表的所有字段数据;
  3. LIMIT来限制查询的数量。可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。SELECT * FROM table_name WHERE column_name1 = xxx LIMIT 0 5,表示从第一条开始查询,查5条记录;
  4. DISTINCT为查询出的某一列信息去重:SELECT DISTINCT column_name1 FROM table_name,对column_name1字段去重;
  5. ORDER BY子将取出的数据按照一列或者多列排序:SELECT column_name1,column_name2 FROM table_name ORDER BY column_name1 DESC, cust_name,ASC表示从小到大拍,DESC表示从大到小排,不指定则按默认从小到大排;
  6. IN操作符用来指定多个范围值:SELECT column_name1, column_name2 FROM table_name WHERE column_name1 IN (10, 20,30)。另外,NOT操作符可以和IN操作符配合使用,用于表示检索出不符合条件的所有数据;
  7. LIKE操作符用来进行模糊查询,与通配符配合使用,%表示任何字符出现任何次数;_表示一个字符:SELECT column_name1, column_name2 FROM table_name WHERE column_name1 LIKE '%hello%'

插入数据

插入语句的语法如下:

INSERT INTO t1 ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN )

如果要插入多组数据,用逗号分隔就行

INSERT INTO t1 ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ), (value11, value22, ...,valueNN)

插入的数据主键或者UNIQUE键冲突时,会执行后面的UPDATE命令,否者执行INSERT命令 INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

UPDATE修改数据

UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]

DELETE删除数据

DELETE FROM table_name [WHERE Clause] [LIMIT 20]

  1. 如果没有where子句,会删除整个表里的数据,是非常危险的操作;
  2. where子句用来限定删除指定的表;
  3. 如果确实要删除全表的数据,可以使用TRUNCATE代替,TRUNCATE也更加高效;

其他

事务控制

开启事务

开启事务有两种方式

  1. begin 常用的开启事务的方式,实际上BEGIN后事务没有立即开启,而是等到第一条语句执行后才开启;
  2. start transaction与begin相同;
  3. start transaction with consistent snapshot则是运行该语句后就立刻开启了事务,不用等到第一条语句的执行;

提交事务

commit

回滚事务

rollback

例如一个转账过程分为三步,从账户a扣款,然后增加账户b的余额,最后插入一条流水。三个过程只有有一个失败即为失败,就应该回滚,不提交就不会生效。

begin;
update table1 set a = a - 1;
update table2 set a = a + 1;
insert into table3 (a, b, c, d) value (1, 2, 3, 4);
commit;
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值