MySQL基础操作

MySQL

1、连接数据量

mysql -u username -p

输入命令后回车,显示Enter password: 输入密码即可。

username登录时使用的用户名

2、创建数据库

create database databaseName

databaseName:需要创建的数据库名。

3、删除数据库

drop database databaseName

databaseName:需要删除的数据库名。

4、选择数据库

use databaseName

databaseName:想要使用的数据库名。

5、创建数据表

create table tableName(column_name column_type);

tableName:需要创建的数据表名

column_name:创建表中的列名

column_type:创建表中的列数据类型

实例:

create table if not exists Device_Type(
    Device_id int auto_increment,
    Device_name varchar(64) not null,
    Device_typenum varchar(24) not null,
    Device_date datetime,
    primary key(Device_id)
) default charset=utf8;
create table if not exists Consumables_Type(
    Consumable_id int auto_increment,
    Consumable_name varchar(64) not null,
    Consumable_typenum varchar(24) not null,
    Consumable_date datetime,
    primary key(Consumable_id)
) default charset=utf8;
create table if not exists Types_Num(
    Type_id int auto_increment,
    Type_Num varchar(24) not null,
    Type_date datetime,
    primary key(Type_id)
)default charset=utf8;
  • auto_increment定义列自增属性,一般用于主键,数值会自动增加1
  • primary key用于定义该列为主键,可以使用多列来定义主键,列间以逗号分隔
  • charset设置编码
  • 如果不想字段为null,设置该字段属性为not null, 在操作数据库时如果该字段为null,则会报错。

6、删除数据表

drop table tableName

tableName:需要删除的数据表名

7、插入数据

insert into tableName(field1, field2,...fieldN) values(value1, value2,...valueN )

tableName:需要插入数据的表名

filed1...fieldN:需要插入数据的表列名

value1...valueN:需要插入的数据。

实例:

insert into Device_type
(Device_name, Device_typenum, Device_date) 
values
("Genie", "001", NOW());
insert into Types_Num
(Type_Num, Type_date)
values("001", NOW()),("002", NOW()), ("003", NOW());

NOW() 函数返回当前系统的日期和时间。

8、查询数据

select column_name1, column_name2, ...column_nameN from tableName 
[where condition]
[limit N][offset M]
  • where 语句来包含筛选条件
  • limit 属性来设定返回的记录数
  • offset 指定select语句开始查询的数据偏移量,默认情况下偏移量为0
  • 使用* 代替字段,将返回所有字段的值。

实例

select * from Device_Type where Device_typenum = '0001' limit 5 offset 1;

只返回唯一的不同值。

select distinct column_name1, column_name2, ...column_nameN from tableName 
[where condition]
[limit N][offset M]

9、where子句

select field1, field2, ...fieldN from tableName1, tableName2
[where condition1 [and[or]] condition2];
  • 查询语句中可以一次查询一个或多个表,表名之间用(,)分隔。
  • 查询语句中可以使用where来设定查询条件
  • 可以使用and(与)或or(或)来连接多个查询条件
  • where子句也可以用于delete、update等命令语句

实例:

select * from Device_Type where Device_typenum = '005' or Device_id < 2;

10、update更新

update tableName set field1 = 'newvalue1', field2 = 'newvalue2' 
[where condition]
  • 可以一次更新一个字段或多个字段的值

实例:

update Device_Type set Device_typenum = '0002' 
where Device_id > 6 and  Device_typenum = '005';

11、delete语句

delete from tableName [where condition];
  • 如果没有where子句,则会删除表中所有的数据。

实例:

delete from Device_Type where Device_id > 8;

12、like语句

select field1, field2,...fieldN from tableName
where like condition;
  • 可以在where子句中使用like子句
  • 可以使用like子句代替等号=
  • like通常与%一起使用,类似于一个元字符的搜索

实例:

update Device_Type set Device_name = 'SuperGenie' where Device_name like 'DP%';

补充:

13、union操作符

MySQL union操作符用于连接两个及以上的select语句,将结果组合到一个结果集中。

select field1, field2,... fieldN from tableName1
[where condition]
union [all | distinct]
select field1, field2,... fieldN from tableName2
[where condition]

distinct: 可选,删除结果集中的重复数据。默认情况下union已经删除了重复数据,所有distinct对结果没有影响

all: 可选,返回结果集中的所有数据,包括重复的数据。

实例:

select Device_typenum from Device_Type
union all 
select Consumable_typenum from Consumables_Type;

14、MySQL排序

select field1, field2, ... fieldN from tableName
order by fieldX ASC | DESC;
  • ASC 升序
  • DESC 降序

实例

select * from Device_Type order by Device_id desc;

15、分组

select field, function(field) from tableName 
[where condition]
group by field;

function(): SQL 函数

实例:

select Consumable_name, COUNT(*) from Consumables_Type group by Consumable_name;
select Consumable_name, COUNT(*) as count from Consumables_Type group by Consumable_name;
  • as 起别名

使用with rollup:可以在实现在分组统计的基础上再进行相同的统计

select Consumable_name, COUNT(*) as count from Consumables_Type group by Consumable_name with rollup;

返回中的NULL则为统计的总和。

select coalesce(Consumable_name, "total") as name, COUNT(*) as count from Consumables_Type group by Consumable_name with rollup;

16、连接的使用

1、inner join(内连接或等值连接)

获取两个表中字段匹配关系的记录

select tableName1.field1, tableName1.field2, tableName2.field1 from tableName1
inner join tableName2
on tableName1.filed = tableName2.filed;

实例:

select Consumables_Type.Consumable_id, Consumables_Type.Consumable_date, Types_Num.Type_Num from Consumables_Type
inner join Types_Num
on Consumables_Type.Consumable_typenum = Types_Num.Type_Num;

2、left join(左连接)

获取左表中的所有记录,即使右表中没有匹配关系的记录

实例:

select Consumables_Type.Consumable_id, Consumables_Type.Consumable_date, Types_Num.Type_Num from Consumables_Type
left join Types_Num
on Consumables_Type.Consumable_typenum = Types_Num.Type_Num;

3、right join(右连接)

获取右表中的所有记录,即使左表中没有匹配关系的记录

实例:

select Consumables_Type.Consumable_id, Consumables_Type.Consumable_date, Types_Num.Type_Num from Consumables_Type
right join Types_Num
on Consumables_Type.Consumable_typenum = Types_Num.Type_Num;

17、NULL值处理

  • is null: 当列的值是 NULL,此运算符返回 true
  • is not null:当列的值不为NULL时,运算符返回true

实例:

insert into Types_Num (Type_Num) values("004"), ("007"), ("008");

使用以下语句查询表Types_Num中Type_date字段为null的数据。

select * from Types_Num where Type_date = NULL;

执行上述语句会返回“empty set”。

正确的查询方式如下:

select * from Types_Num where Type_date is null;

18、事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说要删除某个产品的信息,这个产品的信息可能存在于多个表中,这需要删除每个表中该产品相关的信息,如果有某个表中信息没有成功删除,这可能就造成整个产品信息库错误,因此对于该产品的信息要么全部彻底删除,要么一个都不删除。

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务用来管理 insert,update,delete 语句

事务控制语句:

  • begin或 start transaction 显示的开启一个事务。
  • commit或commit work提交事务,使对数据库的修改变成永久性的。
  • rollback或rollback work回滚会结束用户的事务,并撤销正在进行的所有未提交的修改
  • savepoint identifier,savepoint 允许在事务中创建一个保存点,一个事务中可以有多个 savepoint
  • release savepoint identifier 删除一个事务的保存点,保存点不存在时,执行该语句会抛出一个异常
  • rollback to identifier 把事务回滚到保存点, 保存点不存在时,执行该语句会抛出一个异常
  • set transaction 用来设置事务的隔离级别
事务处理主要有两种方法
1、用 BEGIN, ROLLBACK, COMMIT来实现
  • begin 开始一个事务
  • rollback 事务回滚
  • commit事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
  • set autocommit=0 禁止自动提交
  • set autocommit=1 开启自动提交。

在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交

19、alter命令

alter table语句用于在已有表中添加、删除或修改列。

  • 增加字段
alter table tableName add fieldName datatype

在名为tableName的表中,增加一个名为fieldName的字段,数据类型为datatype.

实例:

alter table Types_Num add Type_msg varchar(64);
  • 删除字段
alter table tableName drop fieldName

在名为tableName的表中,删除名为fieldName的字段。

实例:

alter table Types_Num drop Type_msg;
  • 修改字段

如果需要修改字段类型及名称, 可以在alter命令中使用 modify或 change 子句 。

alter table tableName modify fieldName newdatatype;

在名为tableName的表中,将名为fieldName的字段的数据类型修改为newdatatype。

实例:

alter table Types_Num modify Type_msg char(128);

使用 change 子句, 在 change关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型

alter table tableName change oldfield newfield datatype

在名为tableName的表中,将名为oldfield的字段修改为名为newfield,数据类型为datatype的字段。

实例:

alter table Types_Num change Type_msg Type_message varchar(128);
  • 新增加字段并设置默认值

实例:

alter table Types_Num add Type_msg varchar(64) not null default "unknow"
  • 修改表名
alter table oldTablName rename to newTableName

实例:

alter table Types_Num rename to Types_Serial;

20、索引

1、普通索引

创建索引
create index indexName on tableName(fieldName(length));

indexName:索引名

tableName:表名

fieldName:列名

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

修改表结构添加索引
alter table tableName add index indexName(fieldName);
创建表时创建索引
create table tableName(
    ID int not null,
    fieldName varchar(24) not null,
    index[indexName](fieldName(length))
);
删除索引
drop index [indexName] on tableName

2、唯一索引

创建索引
create unique index indexName on tableName(fieldName(length));
修改表结构添加索引
alter table tableName add unique index indexName(fieldName);
创建表时创建索引
create table tableName(
    ID int not null,
    fieldName varchar(24) not null,
    unique[indexName](fieldName(length))
);

3、显示索引信息

show index from tableName;

21、临时表

MySQL临时表在只在当前连接下有效,连接断开后临时表会自动删除。当使用脚本语言或客户端连接MySQL创建临时表时,脚本运行结束或客户端关闭,则临时表删除。

create temporary table tableName(
);

使用

show tables;

不会显示临时表信息。

22、复制表

1、方法1

create table newTableName();
insert into newTableName (field1, field2, ...fiedlN)
select field1, field2, ...fiedlN from oldTableName

2、方法2

create table newTableName like oldTableName; #只复制表结构
insert into newTableName select * from oldTableName; #复制表中的数据

posted @ 2019-06-25 10:55  小肚哥  阅读(413)  评论(0编辑  收藏  举报