一、数据库管理语句

1、Syntax:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

[create_specification] ...

create_specification:

[DEFAULT] CHARACTER SET [=] charset_name

| [DEFAULT] COLLATE [=] collation_name

(1)在其他关系型数据库中,database与schema是有区别的,但是在mysql5.0.2以后,我们在创建数据库时可以不加区分的使用database和schema,我们可以将create schema理解为create database的代名词。

(2)if not exists 表示在对应的数据库不存在的时候才会创建,if not exists被中括号括起来,表示此项为可选,建议在sql脚本中使用create命令创建数据库时加入此项,以免对应名称的数据库已经存在导致sql脚本终止。

(3)create_specification 表示我们可以在创建数据库时指定对应的数据库规范。

(4)我们可以在创建数据库时指定数据库的字符集,使用character set对应字符集名称即可指定使用什么字符集,如果使用了default关键字,那么这个数据库中创建的所有表默认都会继承这个数据库的字符集,default为可选选项。

(5)我们可以在创建数据库时指定数据库的排序规则;同一种字符集下可能有多种排序规则,但是一种排序规则只能对应于一种字符集。

2、创建数据库

(1)创建名为test1的数据库

MariaDB [(none)]> create database test1;

(2)如果名为test2的数据库不存在,则创建

MariaDB [(none)]> create database if not exists test2;

(3)如果名为test1的数据库不存在,则创建,并且设置其字符集为utf8

MariaDB [mysql]> create database test3 character set utf8;

MariaDB [(none)]> create database if not exists test1 default character set utf8;

3、查看数据库

(1)列出所有已存在的数据库(查看所有数据库)

MariaDB [(none)]> show databases;

  +--------------------+

  | Database           |

  +--------------------+

  | help               |

  | information_schema |

  | mysql              |

  | performance_schema |

  | ren                |

  | test1              |

  | test2              |

  | yan                |

  +--------------------+

(2)列出创建对应数据库的sql语句(可以看到对应的字符集)(查看状态)

MariaDB [(none)]> show create database test1;

(3)列出所有可用的字符集

MariaDB [(none)]> show character set;

(4)查看排序方式

MariaDB [(none)]> show collation;

4、进入数据库(使用数据库)

MariaDB [(none)]> use mysql;

查看当前数据库与当前连接的概要信息:

MariaDB [mysql]> status;
--------------
mysql Ver 15.1 Distrib 10.2.26-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 21    #当前连接的ID号
Current database: mysql   #当前选择使用的数据库
Current user: root@localhost  #当前连接的登录用户
SSL: Not in use    #是否使用了ssl
Current pager: stdout 
Using outfile: ''
Using delimiter: ;      #当前会话的行终结符是分号
Server: MariaDB    #当前mysql版本为mariadb分支
Server version: 10.2.26-MariaDB MariaDB Server  #当前mysql服务器的版本号
Protocol version: 10    #协议版本
Connection: Localhost via UNIX socket    #使用的连接类型,通过本机的套接字文件进行连接
Server characterset: latin1  #服务器使用的字符类型
Db characterset: latin1  #当前数据库使用的字符类型
Client characterset: utf8    #当前mysql客户端使用的字符类型
Conn. characterset: utf8    #当前连接使用的字符类型
UNIX socket: /var/lib/mysql/mysql.sock  #套接字文件路径
Uptime: 11 hours 35 min 12 sec    #mysql数据库的启动时长 Threads: 7 Questions: 564 Slow queries: 0 Opens: 66 Flush tables: 1 Open tables: 36 Queries per second avg: 0.013
--------------

5、修改数据库

修改数据库的基本语法:

ALTER {DATABASE | SCHEMA} [db_name]

alter_specification ...

ALTER {DATABASE | SCHEMA} db_name

UPGRADE DATA DIRECTORY NAME

alter_specification:

[DEFAULT] CHARACTER SET [=] charset_name

| [DEFAULT] COLLATE [=] collation_name

修改数据库就是修改数据库的字符集,或者修改字符集的排序规则

(1)查看数据库的字符集:

MariaDB [mysql]> show variables like 'character%';

(2)修改数据库的字符集:

MariaDB [mysql]> alter database test1 character set utf8;

(3)修改数据库的字符集,并设置为默认字符集,数据库中的表都会继承此字符集:

MariaDB [mysql]> alter database test1 default character set utf8;

6、删除数据库(注意:删除操作无法恢复)

删除数据库的基本语法:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

例子:

MariaDB [mysql]> drop database if exists test3;

MariaDB [mysql]> drop database test3;

二、表管理语句

1、查看表

(1)查看当前数据库上的所有表:

MariaDB [ren]> show tables;

(2)查看当前数据库中所有表的具体属性信息:

MariaDB [ren]> show table status\G;   #\G表示垂直显示

(3)查看当前数据库中的某张表的具体属性信息,可以使用like匹配表名称:

MariaDB [ren]> show table status like 'students'\G;

或者使用通配符:

MariaDB [ren]> show table status where name like '%stu%'\G;

(4)查看表的结构(字段、类型)describe

MariaDB [ren]> desc students;

(5)查看某张表被创建时对应的sql语句:

MariaDB [ren]> show create table students\G;

2、创建表

创建一个新表的基本语法格式:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

(create_definition,...)

[table_options]

[partition_options]

创建表的三种方式:

  1、create table test (id int,name varchar);

  2、create table test like Old_Table;     <<会继承Old_Table的表结构

  3、create table test as select * from Old_Table;    <<会继承表结构以及表中的数据

 数据类型:

     bit[(M)]
二进制位(101001),m表示二进制位的长度(1-64),默认m=1

tinyint[(m)] [unsigned] [zerofill]
小整数,数据类型用于保存一些范围的整数数值范围:
有符号:-128 ~ 127.
无符号:~ 255
特别的: MySQL中无布尔值,使用tinyint(1)构造。 int[(m)][unsigned][zerofill]
整数,数据类型用于保存一些范围的整数数值范围:
有符号: -2147483648 ~ 2147483647
无符号:~ 4294967295
特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002 bigint[(m)][unsigned][zerofill]
大整数,数据类型用于保存一些范围的整数数值范围:
有符号: -9223372036854775808 ~ 9223372036854775807
无符号: ~ 18446744073709551615

decimal[(m[,d])] [unsigned] [zerofill]
准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
特别的:对于精确数值计算时需要用此类型
decaimal能够存储精确值的原因在于其内部按照字符串存储。

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
无符号:
-3.402823466E+38 to -1.175494351E-38,
1.175494351E-38 to 3.402823466E+38
有符号:
1.175494351E-38 to 3.402823466E+38
**** 数值越大,越不准确 **** DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
无符号:
-1.7976931348623157E+308 to -2.2250738585072014E-308
2.2250738585072014E-308 to 1.7976931348623157E+308
有符号:
2.2250738585072014E-308 to 1.7976931348623157E+308
**** 数值越大,越不准确 **** char (m)
char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
PS: 即使数据小于m长度,也会占用m长度

varchar(m)
varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡 text
text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。 mediumtext
A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters. longtext
A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters. enum
枚举类型,
An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
示例:
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small'); set
集合类型
A SET column can have a maximum of 64 distinct members.
示例:
CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); DATE
YYYY-MM-DD(1000-01-01/9999-12-31) TIME
HH:MM:SS('-838:59:59'/'838:59:59') YEAR
YYYY(1901/2155) DATETIME
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP
YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

约束条件:

主键primary key:物理上存储的顺序,并且拥有唯一性(一个表中只能有一个主键,一个主键可以包含多个字段),字段不能为空(有索引的作用)
非空not null:此字段不能为空,不设置默认为null,表示对应字段可以为空
唯一unique:此字段不允许重复(一个表中可以有多个唯一键)
默认default:当不填写此值时会使用默认值,如果填写则已填写为准
anto_increment:表示对应字段使用自动增长,一个表中只有一个字段能被设置为自动增长,而且这个字段必须被定义为key(或者索引)
外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
check(expr):用于定义检查性约束
[comment 'string']:设置字段的描述信息,此设置可省
{index|key}:定义索引
{fulltext|spatial}:全文索引和空间索引

例子:

--创建classes表(id, name)
create table zzzz(
id int primary key not null auto_increment,
name varchar(20),
age int
);
--创建students表(id, name, age, high, gender, cls_id)
create table students (
id int unsigned not null auto_increment primary key,
name varchar(20),
age tinyint unsigned default 0,
high decimal(5,2),
gender enum('男','女','中性','保密') default '保密',
cls_id int unsigned
);

表的其它选项(通过help命令查询):

table_option:
ENGINE [=] engine_name
| AUTO_INCREMENT [=] value
| AVG_ROW_LENGTH [=] value
| [DEFAULT] CHARACTER SET [=] charset_name
| CHECKSUM [=] {0 | 1}
| [DEFAULT] COLLATE [=] collation_name
| COMMENT [=] 'string'
| CONNECTION [=] 'connect_string'
| DATA DIRECTORY [=] 'absolute path to directory'
| DELAY_KEY_WRITE [=] {0 | 1}
| INDEX DIRECTORY [=] 'absolute path to directory'
| INSERT_METHOD [=] { NO | FIRST | LAST }
| KEY_BLOCK_SIZE [=] value
| MAX_ROWS [=] value
| MIN_ROWS [=] value
| PACK_KEYS [=] {0 | 1 | DEFAULT}
| PASSWORD [=] 'string'
| ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
| TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]
| UNION [=] (tbl_name[,tbl_name]...)

3、删除表

删除表的语句如下:

MariaDB [ren]> drop table students;

MariaDB [ren]> drop table if exists classes,students;

可以删除指定的单张表,也可以一次删除多张表,表之间用逗号隔开;

删除表的做法比较危险,如果不是确定要删而且必须要删,请勿随意删除,此处没有回收站,数据无价。

4、修改表

如果在表中还没有任何数据时,我们可以相对轻松的修改表结构,但是如果表中已经存在了很多数据,那么我们应该充分的考虑修改表结构以后给我们带来的麻烦。

修改表时,往往是添加、删除、修改表中的字段、索引、约束等。

修改表中的基本语法:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name

[alter_specification [, alter_specification] ...]

[partition_options]

(1)修改表名、重命名表

MariaDB [ren]> alter table new rename as test;

(2)添加字段(无任何属性)

MariaDB [ren]> alter table test add column id int;(column可省)

MariaDB [ren]> alter table test add id int;

(3)添加字段,同时为添加的字段设定相应的约束

MariaDB [ren]> alter table test add age int not null default 0;

(4)为表添加字段,同时指定新添加的字段在表中的位置

MariaDB [ren]> alter table test add brith datetime first;

将新添加的brith字段设置为表中的第一个字段

MariaDB [ren]> alter table test add high int after name;

将新添加的high字段添加到name字段的后面

(5)删除字段

MariaDB [ren]> alter table test drop brith;

(6)修改字段

修改字段数据类型可以使用两种语法,modify和change

MariaDB [ren]> alter table test modify id tinyint;

MariaDB [ren]> alter table test change age age char(20);       #字段名需写两次

(7)重命名字段

MariaDB [ren]> alter table test change class home char(20);

mysql基础之mariadb库管理和表管理语句的更多相关文章

  1. mysql基础之mariadb的安装,连接,用户,密码,权限设置语句详解

    一.mariadb安装 1.配置mariadb源: [root@ren7 ~]# vim /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB ...

  2. 基本SQL命令 (1.SQL命令使用规则/2.库管理/3.表管理/4.表记录管理/5.更改库,库的默认字符集/6.连接数据库的过程/7.数据类型)

    1.SQL命令的使用规则       1.每条命令必须以 ; 结尾       2.SQL命令不区分字母大小写       3.使用 \c 终止SQL命令的执行 2.库的管理     1.库的基本操作 ...

  3. mysql基础之mariadb galera集群(多主)

    一.概念 galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性. galera集群是基于wsrep协议(端口4 ...

  4. MySQL基础操作&&常用的SQL技巧&&SQL语句优化

    基础操作     一:MySQL基础操作         1:MySQL表复制             复制表结构 + 复制表数据             create table t3 like t ...

  5. mysql基础之mariadb概念

    一.数据库介绍 什么是数据库(Database)? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库 ...

  6. Mysql基础(四):库、表、记录的详细操作、单表查询

    目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...

  7. MySQL基础(三)多表查询(各种join连接详解)

    Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些 ...

  8. Mysql基础(五):多表查询、pymysql模块

    目录 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 2. 连表查询 3. 子查询 4. pymysql模块 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 将两表所有的数据一 ...

  9. mysql基础之mariadb对表中数据的增删改查

    复习: 查看表:show tables; 创建表:create table 表名(字符类型); 删除表:drop table 表名; 对表的结构进行增删改查: 查看表结构:desc 表名; 修改表-添 ...

随机推荐

  1. 鹏城杯_2018_treasure

    鹏城杯_2018_treasure 首先检查一下保护: IDA分析 我们先来看看settreasure()函数 申请了两个内存空间,并往sea中复制了shellcode 看看这个shellcode,不 ...

  2. 【随笔】C++类静态成员变量初始化引发的惨痛教训

    事情是这样的,我在某个类中声明了一个静态的map成员, 文件名暂且称之为 xxx.h 然后在 xxx.cc 中全局定义了这个东西,静态成员在类里面只是声明,需要在外边被定义才有内存 然后又在main. ...

  3. Go-23-接口

    接口定义 type 接口名 interface{ 方法1(参数列表) [返回值] 方法2(参数列表)[返回值] } 接口实现 func (变量 结构体类型)方法1 ([参数列表])(返回值){ } f ...

  4. Java多线程详解——一篇文章搞懂Java多线程

    目录 1. 基本概念 2. 线程的创建和启动 2.1. 多线程实现的原理 2.2.多线程的创建,方式一:继承于Thread类 2.3.多线程的创建,方式一:创建Thread匿名子类(也属于方法一) 2 ...

  5. LINQPad,我的C#/.NET学习诀窍

    LINQPad,我的C#/.NET学习诀窍 在我以往的文章中,尤其涉及代码演示的,都使用了同一个工具--LINQPad.但许多客户面对我分享的.linq源文件都迷茫不知所措,因此有必要来聊聊一下这个强 ...

  6. 【Scrapy(四)】scrapy 分页爬取以及xapth使用小技巧

    scrapy 分页爬取以及xapth使用小技巧 这里以爬取www.javaquan.com为例: 1.构建出下一页的url: 很显然通过dom树,可以发现下一页所在的a标签   2.使用scrapy的 ...

  7. hdu4861 找规律了

    题意:      给你k个球和一个整数p,每个球的价值是 1^i+2^i+...+(p-1)^i (mod p),两个人轮流取球,最后谁的总价值也大谁就赢,问你先手能不能赢. 思路:      一开始 ...

  8. Linux下的用户、组和权限

    目录 一:用户和组信息的查看 查看用户信息 查看密码信息 查看组信息 特殊组wheel 二:用户和组信息的管理 用户管理 组管理 三:文件权限 文件权限的查看 文件权限的修改 ACL控制权限 setf ...

  9. POJ3498最大流,枚举终点,企鹅,基础最大流

    题意:       有一n个冰块,每个冰块上都有一些企鹅,所有的企鹅要跳到一个冰块上去,但是由于起跳是的后坐力原因导致每个冰块最多条mi次,最后问你所有的企鹅都跳到一个冰块上去的那块冰块可以是哪一块, ...

  10. Windows核心编程笔记之错误处理

    0x01 GetLastError() 函数用于获取上一个操作的错误代码 #include <Windows.h> #include <iostream> using name ...