简介

本篇博客将详细讲解mysql的一些常用sql语句操作,例如创建数据库,删除数据库,创建表,修改表,删除表,以及简单查询案例。

关于mysql数据中的SQL的大小写问题

1.不区分大小写

1. sql中的关键字函数名

2. 存储过程、促存储函数、调度器

2.区分大小写

1. 库名、表名(也可以不区分--修改配置文件或者环境变量)

2. 触发器

3. 视图

3.第一类语句:与数据库相关的语句

语句1:创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification] ...

说明:

IF NOT EXISTS:判断当前系统中是否有要创建的这个数据库,如果有的话,不再执行创建,而且不会报错

CHARACTER SET:指定当前数据库所采用字符类型(utf8)

COLLATE:指定排序规则

例子:

CREATE DATABASE IF NOT EXISTS jobs DEFAULT CHARACTER SET utf8

语句2:删除数据库

DROP DATABASE [IF EXISTS] db_name

例子:DROP DATABASE IF EXISTS test;

语句3:修改数据库

这里往往仅仅是修改数据库中的字符集类型和排序规则(不能修改修改数据库名)

ALTER DATABASE [db_name]  alter_specification ...

例子:修改test1的字符集为utf8

ALTER DATABASE test1 DEFAULT CHARACTER SET utf8;

修改数据库名称:

先对要修改名称的数据库做备份,然后新建一个数据库,库名就是新的名字,然后将备份的数据还原到这个新库中

语句4:更新数据字典

ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME

4.第二类语句:与表相关的语句

语句1:新建表

方法1:直接创建一张新表

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...)  [table_options] [partition_options]

TEMPORARY:该选项表示所创建的是一张临时表,表是在内存

create_definition:   <<创建定义

| PRIMARY KEY (col_name1, col_name1...)  <<创建主键

| {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ... <<创建索引

| [CONSTRAINT UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)  [index_option] ... <<创建唯一键

| [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition <<定义约束

| CHECK (expr) <<定义check

例子:创建一张表,id为主键、name长度为30,age为整型

CREATE TABLE tb1 (id int PRIMARY KEY, name char(30), age int(3))

CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id))

例子:创建一张表,id和name构成联合主键、name长度为30,age为整型

CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id,name))

table_option:

AUTO_INCREMENT [=] value             << 指定主键从几开始自增

| ENGINE [=] engine_name              <<< 指定表所使用的存储引擎

| [DEFAULT] CHARACTER SET [=] charset_name  <<< 指定当前表的字符集(不指定会继承)

| CHECKSUM [=] {0 | 1}  <<< 指定是否对插入的数据做校验(可以保证数据一致,但是会带来额外的系统开销)

| [DEFAULT] COLLATE [=] collation_name    <<< 指定当前表的排序规则(不指定会继承)

| COMMENT [=] 'string'               <<< 指定当前表的描述说明信息

| DELAY_KEY_WRITE [=] {0 | 1}          <<< 延迟键写入,推迟重建索引的间隔

| MAX_ROWS [=] value

| MIN_ROWS [=] value

| UNION [=] (tbl_name[,tbl_name]...)           <<< 做表联合

|TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]      <<< 定义表空间

| ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}   <<< 定义表格式

例子:创建一张表,id为主键、name长度为30,要求id从10开始自增

CREATE TABLE tb8 (id int PRIMARY KEY, name char(30)) AUTO_INCREMENT 10;

或者

create table ken (id int,name char(30),primary key(id)) auto_increment 10; <<指定自增开始,需要放在外面

方法2:根据现有表创建新表,而且新表中的数据也是来自于现有表

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

[(create_definition,...)]

[table_options]

[partition_options]

[IGNORE | REPLACE]

[AS] query_expression

例子:

create table ken1 as select * from mysql.user;

注意:如果使用这个命令需要把配置文件/etc/my.cnf中下面的这两行注释掉!

#gtid-mode = on

#enforce-gtid-consistency=1

方法3:根据现有表创建新表,但是仅仅有表结构

CREATE TABLE [IF NOT EXISTS] tbl_name LIKE old_tbl_name

例子:基于mysq.l.user创建新表

CREATE TABLE tb01 LIKE mysql.user;

创建表的三种方式

1. create table ken(id int,name char)

2. create table ken like old_table     <<会继承old_table的表结构

3. create table ken AS select * from old_table  <<继承表结构以及表中的数据

语句2:删除表

DROP TABLE [IF EXISTS] tbl_name [, tbl_name]... [CASCADE]

说明:

CASCADE:级联删除

语句3:修改表结构 alter(字段、属性、限制、约束、索引、键...)

ALTER TABLE tbl_name

[alter_specification [, alter_specification] ...]

[partition_options]

1.添加字段

ADD col_name column_definition [FIRST | AFTER col_name]

例子:

# 在age字段后添加一个新的字段school

ALTER TABLE tb1 ADD school CHAR(10) AFTER age;

# 在最前面插入字段job

ALTER TABLE tb1 ADD job CHAR(20) NOT NULL FIRST;

# 在末尾添加一个新字段phone

ALTER TABLE tb1 ADD phone int(10);

2.删除表中的字段

DROP col_name

例子:删除age字段

ALTER TABLE tb1 DROP age;

生产环境建议

添加字段最好添加在末尾

最好不要删除无用的字段

3.修改表中的字段(修改字段的约束和属性,但是无法修改字段名)

MODIFY col_name column_definition [FIRST | AFTER col_name]

例子:ALTER TABLE tb1 MODIFY name varchar(50) NOT NULL DEFAULT 'zx';

4.修改字段的名称

CHANGE old_col_name new_col_name column_definition [FIRST|AFTER col_name]

例子: ALTER TABLE tb1 CHANGE job jobs char(30) not null;

5.添加删除索引

ADD index [索引类型] (字段1,字段2...) [options]

例子:将索引添加到 name字段上

ALTER TABLE tb1 ADD INDEX (name); 《《在添加索引的时候列明这里需要加上括号

查看表中的索引

SHOW INDEXES FROM tb1;

删除索引

alter table ken3 drop index id;  <<删除索引的时候这里不需要加括号

注意:索引不是越多越好,会使得写入速度变慢

6.添加约束、删除约束

主键:

唯一:

| ADD [CONSTRAINT [symbol]] PRIMARY KEY

[index_type] (index_col_name,...) [index_option] ...

| ADD [CONSTRAINT [symbol]]

UNIQUE [INDEX|KEY] [index_name]

[index_type] (index_col_name,...) [index_option] ...

关于主键

DROP PRIMARY KEY

{DISABLE|ENABLE} KEYS

7.修改表名

RENAME [TO|AS] new_tbl_name

例子:

alter table ken3 rename to ken33;

8.指定表中的内容按照哪个字段进行排序

(如果表中有索引或者主键,那么无法按照指定的字段排序)

ORDER BY col_name [, col_name] ...

9.修改表所使用的字符集类型

CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

语句4:删除表中的数据

DELETE FROM 表名 [条件]

delete from ken where age>=25; <<删除指定的行

delete from ken;                              <<删除表中的全部数据

truncate ken;        <<删除表中的全部数据

说明:

如果没有条件,那么是删除表中的全部数据

表的截断:停止主键的自增

截断表的格式:TRUNCATE 表名   <<< 删除表中的数据,同时截断表

第三类语句:简单的查询

查询

简单查询

多表查询

联合查询

1.简单查询格式

SELECT 字段名... FROM 表名 [条件] [选项]

例子:查询t09中的全部数据

> SELECT * FROM t09;

例子:查询t09中的id

> SELECT id FROM t09;

例子:查看所有id大于5的记录

> SELECT * FROM t09 WHERE id>5

例子:查看所有id大于5的记录的中的name字段

> SELECT name FROM t09 WHERE id>5

6.条件的表达方式

=

>

<

>=

<=

!=   <>

is null

is not null

in

between ... and ...

like:结合通配符

RLIKE:结合正则

组合条件

and

or

not

排序

order by 字段 [desc|asc]

限制输出的记录条数

limit n:仅仅显示n条记录

limit m,n:

7.几个查询案例(oracle自带库表)

案例:将年龄在20-25的用户名和用户id显示出来

mysql> select name,stuid,age from students where age>=20 and age<=25;

mysql> select name,stuid,age from students where age between 20 and 25;

案例:将年龄在小于20,或者大于25的用户名和用户id显示出来

select stuid,name,age from students where age<20 or age>25;

案例:显示用户名是以S为开头的用户名和年龄

mysql> select name,age from students where name like 'S%';

案例:显示用户名是以Y为开头,且年龄是19的用户

mysql> select name,age from students where name like 'Y%' and age=19;

案例:显示用户名是以Y为开头,且年龄小于20的用户

mysql> select name,age from students where name like 'Y%' and age<20;

案例:显示所有用户的用户名和年龄

mysql> select name,age from students;

案例:显示所有用户的用户名和年龄,要求按照年龄排序(从大到小排)

mysql> select name,age from students order by age desc;

案例:显示所有用户的用户名和年龄,要求仅仅显示年龄最大的三个用户

mysql> select name,age from students order by age desc limit 3;

案例:统计students表有多少行

mysql> select count(*) from students;

案例:显示年龄最大的用户的年龄

mysql> select max(age) from students;

8.几个内置函数

user()

database()

count():统计记录的条数

max():

min()

使用select database();查看

补充

补充:数据库的默认字符集

继承

数据库的字符集会自动继承自mysql的字符集

表的字符集会自动继承当前这个数据库的字符集

表中的字段的字符集会自动集成表的字符集

避免乱码:保证字符集统一

1. 操作系统所采用的字符集

2. 当前终端的字符集

3. mysql客户端字符集

4. mysql服务器端字符集(mysql、数据库、表、字段)

小试身手

1. 创建数据库 test(字符集 utf8 ,要使用IF NOT EXISTS)

2. 在test库中创建一张表ken,字段如下

id 整型 主键 非空 非负 自增(从5开始)

name 字符类型 非空

gender 枚举ENUM('M', 'F')  默认值是M

要求存储引擎用MyISAM

答案:

create database if not exists test default character set utf8;

create table if not exists ken (id int primary key not null, name char(30) not null, gender enum("M","F")) auto_increment 5 ENGINE="MyISAM";

总结

总而言之,sql语句操作起来还是比较简单的,只要熟练使用help contents,就能轻松驾驭各种sql语句,关键在于理解,比如什么是字段,什么是索引,什么是事务等,只要理解了这些概念性的东西,就可以使用sql来定向操作你需要的内容了。

MySQL系列详解二:MySQL语句操作-技术流ken的更多相关文章

  1. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  2. MySQL系列详解三:MySQL中各类日志详解-技术流ken

    前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...

  3. MySQL Explain详解 查看mysql语句详情

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  4. MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken

    前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...

  5. MySQL系列详解一:MySQL&&多实例安装-技术流ken

    简介 MySQL是一个真正的多用户.多线程SQL数据库服务器.SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储.更新和存取信息更加容易.MySQL是一个客户机/服务器结构的实现 ...

  6. MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

    xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...

  7. MySQL系列详解四:MySQL事务-技术流ken

    MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...

  8. MySQL系列详解九:MySQL级联复制演示-技术流ken

    前言 级联复制就是master服务器,只给后端一台slave服务器同步数据,然后这个slave服务器在向后端的所有slave服务器同步数据,这样就可以降低master服务器的写压力,和复制数据的网络I ...

  9. MySQL系列详解十:MySQL多源复制演示-技术流ken

    前言 多源复制即多主一从结构,多个主服务器端的数据都会同步到后端一个从服务器上面.至于为什么要做多源复制下面的总结很到位. 1.灾备作用:将各个库汇总在一起,就算是其他库都挂了(整个机房都无法连接了) ...

随机推荐

  1. 自定义react-navigation的TabBar

    在某些情况下,默认的react-navigation的tab bar无法满足开发者的要求.这个时候就需要自定义一个tab bar了.本文就基于react-navigtion v2来演示如何实现一个自定 ...

  2. 关于信息系统设计与开发——案例:VIP系统

    一.关于信息系统设计与开发 信息系统开发流程先对需求分析系统分析,设计数据库,设计程序,再对测试数据进行测试. 在程序设计中运用了接口:定义一个接口,可以有多种实现.变量声明为接口变量,调用接口方法, ...

  3. 洛谷P1725--琪露诺(单调队列)

    https://www.luogu.org/problemnew/show/P1725 关于滑动窗口的解释https://www.cnblogs.com/albert67/p/10449039.htm ...

  4. centos jdk 配置及版本切换

    一. 环境变量: /etc/profile JAVA_HOME=/usr/lib/jdk1.8.0_91JRE_HOME=/usr/lib/jdk1.8.0_91/jreCLASS_PATH=.:$J ...

  5. MVC概述

    学习MVC模式   一.MVC简介 MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它把应用程序分成三个核心模块:模型.视图.控制器,它们各自处理 ...

  6. 画线代码V1.0.0

    画线代码: 最终效果图: 优点: 1.效果还行,计算量也不大(就一点2维直线一般式能有多少运算量). 缺点: 1.每条线怎么也是建模,可能会有点开销. 2.编辑起来很是麻烦. 代码部分: /***** ...

  7. stm32模拟IO读写AT24C02

    /* *@brief 主机向从机写多字节 * *@param addr - 地址 *@param p_buf - 数据指针 *@param len - 待写入字节长度 * *@return * *@n ...

  8. CS61B HW0

    The Enhanced For Loop public class EnhancedForBreakDemo { public static void main(String[] args) { S ...

  9. flask上下文(new)

    flask源码解析之上下文 引入 对于flask而言,其请求过程与django有着截然不同的流程.在django中是将请求一步步封装最终传入视图函数的参数中,但是在flask中,视图函数中并没有请求参 ...

  10. eclipse对于标签的配置不会出现自动提示的解决

    解决办法:引入 mybatis-3-config.dtd 文件Window-preferences-搜索 xml-xml catalog在 User Specified Entries 目录下 add ...