mysql基础篇二(多年前整理)

一:结构化查询语句分类

名称 解释 命令

DDL 定义和管理数据对象,如数据库,数据表等 create drop alter

(数据定义语言)

DML 用于操作数据库对象中所包含的数据 insert update delete

(数据操作语言)

DQL 用于查询数据库数据 select

(数据查询语言)

DCL 用来管理数据库的语言,包括管理权限及数据更改 grant commit rollback

(数据控制语言)
二:创建数据表语句

属于DDL的一种

语法:

CREATE TABLE [IF NOT EXISTS] 表名 (

复制代码
`字段名1`    列类型 [属性]  [索引] [注释] ,
 `字段名2`   列类型 [属性]  [索引] [注释] , 
... ...    
     `字段名n`   列类型 [属性]  [索引] [注释] 

)  [表类型] [表字符集] [注释] ;
``反引号:反引号用于区别MySQL保留字与普通字符而引入的.

//查看当前所在的数据库
select database();
//创建表
CREATE TABLE IF NOT EXISTS t1(
		username VARCHAR(16),
		age TINYINT UNSIGNED,
		salary FLOAT(7,2)
		);
//查看刚刚创建的表的sql语句
show create table t1;
//查看表结构
desc t1;

±---------±--------------------±-----±----±--------±------+

| Field | Type | Null | Key | Default | Extra |

±---------±--------------------±-----±----±--------±------+

| username | varchar(16) | YES | | NULL | |

| age | tinyint(3) unsigned | YES | | NULL | |

| salary | float(7,2) | YES | | NULL | |

±---------±--------------------±-----±----±--------±------+

//创建学科表

±------------±------------±-----±----±--------±---------------+

| Field | Type | Null | Key | Default | Extra |

±------------±------------±-----±----±--------±---------------+

| SubjectNo | int(11) | NO | PRI | NULL | auto_increment |

| SubjectName | varchar(50) | YES | | NULL | |

| ClassHour | int(4) | YES | | NULL | |

| GradeID | int(4) | YES | | NULL | |

±------------±------------±-----±----±--------±---------------+

CREATE TABLE IF NOT EXISTS subject(

SubjectNo INT(11) PRIMARY KEY AUTO_INCREMENT,

SubjectName VARCHAR(50) COMMENT '学科名称',

ClassHour INT(4) COMMENT '学时',

GradeID INT(4) COMMENT '年级ID'

)ENGINE=INNODB DEFAULT CHARSET=UTF8 COMMENT '课程表';

复制代码
//系统生成的sql
CREATE TABLE `subject` (
`SubjectNo` int(11) NOT NULL AUTO_INCREMENT,
`SubjectName` varchar(50) DEFAULT NULL COMMENT '学科名称',
`ClassHour` int(4) DEFAULT NULL COMMENT '学时',
`GradeID` int(4) DEFAULT NULL COMMENT '年级ID',
PRIMARY KEY (`SubjectNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='课程表'

三:列类型分类

NULL值

理解为"没有值"或"未知值"

不要用NULL进行算术运算,结果仍为NULL

MySQL中,0或NULL都意味着为假,1为真

复制代码
UNSIGNED
无符号的
声明该数据列不允许负数

ZEROFILL
0填充的
不足位数的用0来填充,如 int(3),5则为005

AUTO_INCREMENT
自动增长的,每添加一条数据,自动在上一个记录数上加1
通常用于设置主键,且为整数类型
可定义起始值和步长

DEFAULT
默认的

±------±-----------------------------±-----±----±--------±---------------+

| Field | Type | Null | Key | Default | Extra |

±------±-----------------------------±-----±----±--------±---------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| name | varchar(16) | NO | | NULL | |

| age | tinyint(3) unsigned zerofill | YES | | NULL | |

| sex | enum('1','2','3') | YES | | 3 | |

±------±-----------------------------±-----±----±--------±---------------+

复制代码
 CREATE TABLE IF NOT EXISTS t2(
id INT UNSIGNED  PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(16) NOT NULL,
age TINYINT ZEROFILL,
sex ENUM('1','2','3') DEFAULT '3'
);
//设置中文为GBK
SET NAMES GBK;
//插入模拟数据
INSERT INTO t2(id,`name`,age) VALUES(NULL,'张三',4);

四:数据表的类型

MySQL的数据表的类型:

MyISAM、InnoDB 、HEAP、BOB、CSV等

常见的MyISAM与InnoDB类型

名称 MyISAM InnoDB

事务处理 不支持 支持

数据行锁定 不支持 支持

外键约束 不支持 支持

全文索引 支持 不支持

表空间大小 较小 较大约两倍

适用场合:

使用MyISAM: 节约空间及相应速度

使用InnoDB: 安全性,事务处理及多用户操作数据表

五:MySQL数据表以文件方式存放在磁盘中

包括表文件、数据文件以及数据库的选项文件

位置:MySQL安装目录\data下存放数据表。目录名对应数据库名,该目录下文件名对应数据表

C:\ProgramData\MySQL\MySQL Server 5.5\data

//创建模拟数据表

mysql> CREATE TABLE t3(

-> id SMALLINT PRIMARY KEY AUTO_INCREMENT,

-> name varchar(16)

-> )ENGINE=MyISAM;

Query OK, 0 rows affected (0.18 sec)

复制代码
mysql> CREATE TABLE t4(
-> id SMALLINT PRIMARY KEY AUTO_INCREMENT,
-> `name` varchar(16)
-> )ENGINE=InnoDB;
Query OK, 0 rows affected (0.21 sec)

InnoDB类型数据表只有一个*.frm文件,以及上一级目录的ibdata1文件

MyISAM类型数据表对应三个文件:
   *.frm  --  表结构定义文件
   *.MYD  --  数据文件
   *.MYI  --  索引文件

六:设置数据库的字符集

可为数据库、数据表、数据列设定不同的字符集

设定方法:

1)创建时通过命令来设置

CREATE TABLE 表名(

#省略一些代码

)CHARSET=utf8;

2)如无设定,则根据MySQL数据库配置文件my.ini

(Windows系统)中的参数设定

如:character-set-sever = utf8

七:修改表(ALTER TABLE)

修改表名

ALTER TABLE 旧表名 RENAME AS 新表名

//将subject表名修改为subject2

ALTER TABLE subject RENAME AS subject2;

添加字段

//查看原表结构,添加Remark字段类型varchar(255)

mysql> DESCRIBE subject2;

±------------±------------±-----±----±--------±---------------+

| Field | Type | Null | Key | Default | Extra |

±------------±------------±-----±----±--------±---------------+

| SubjectNo | int(11) | NO | PRI | NULL | auto_increment |

| SubjectName | varchar(50) | YES | | NULL | |

| ClassHour | int(4) | YES | | NULL | |

| GradeID | int(4) | YES | | NULL | |

±------------±------------±-----±----±--------±---------------+

ALTER TABLE subject2 ADD Remark VARCHAR(255);

复制代码
mysql> SHOW COLUMNS FROM `subject2`;

±------------±-------------±-----±----±--------±---------------+

| Field | Type | Null | Key | Default | Extra |

±------------±-------------±-----±----±--------±---------------+

| SubjectNo | int(11) | NO | PRI | NULL | auto_increment |

| SubjectName | varchar(50) | YES | | NULL | |

| ClassHour | int(4) | YES | | NULL | |

| GradeID | int(4) | YES | | NULL | |

| Remark | varchar(255) | YES | | NULL | |

±------------±-------------±-----±----±--------±---------------+

修改字段

//将Remark字段类型改为:varchar(64)

ALTER TABLE subject2 MODIFY Remark VARCHAR(64);

//将Remark字段,修改为Remark2类型改为:varchar(255)

ALTER TABLE subject2 CHANGE Remark Remark2 VARCHAR(255);

删除字段

//将Remark字段删除

ALTER TABLE subject2 DROP Remark2;

八:删除表

DROP TABLE [IF EXISTS] 表名

DROP TABLE t1;

九:其他命令

//跨数据库查询有多少表

SHOW TABLES FROM 其他数据库名;

十:课堂练习

student表:

±-------------±-------------±-----±----±--------±---------------+

| Field | Type | Null | Key | Default | Extra |

±-------------±-------------±-----±----±--------±---------------+

| StudentNo | int(4) | NO | PRI | NULL | auto_increment |

| LoginPwd | varchar(20) | YES | | NULL | |

| StudentName | varchar(20) | YES | | NULL | |

| Sex | tinyint(1) | YES | | NULL | |

| GradeId | int(11) | YES | | NULL | |

| Phone | varchar(50) | NO | | NULL | |

| Address | varchar(255) | NO | | NULL | |

| BornDate | datetime | YES | | NULL | |

| Email | varchar(50) | YES | | NULL | |

| IdentityCard | varchar(18) | YES | | NULL | |

±-------------±-------------±-----±----±--------±---------------+

mysql> CREATE TABLE IF NOT EXISTS student(

-> StudentNo INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',

-> LoginPwd VARCHAR(20),

-> StudentName VARCHAR(20) COMMENT '学生姓名',

-> Sex TINYINT(1) COMMENT '0或1',

-> GradeId INT(11) COMMENT '年级编号',

-> Phone VARCHAR(50) NOT NULL COMMENT '联系电话',

-> Address VARCHAR(255) NOT NULL COMMENT '地址',

-> BornDate DATETIME COMMENT '出生日期',

-> Email VARCHAR(50) COMMENT '邮箱',

-> IdentityCard VARCHAR(18) COMMENT '身份证号'

-> )ENGINE=InnoDB DEFAULT CHARSET=UTF8 COMMENT '学生信息表';

Query OK, 0 rows affected (0.22 sec)

成绩表:

±--------------±---------±-----±----±--------±---------------+

| Field | Type | Null | Key | Default | Extra |

±--------------±---------±-----±----±--------±---------------+

| StudentNo | int(4) | NO | PRI | NULL | auto_increment |

| SubjectNo | int(4) | NO | | NULL | |

| ExamDate | datetime | NO | | NULL | |

| StudentResult | int(4) | NO | | NULL | |

±--------------±---------±-----±----±--------±---------------+

mysql> CREATE TABLE IF NOT EXISTS result(

-> StudentNo INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',

-> SubjectNo INT(4) NOT NULL COMMENT '课程编号',

-> ExamDate DATETIME NOT NULL COMMENT '考试日期',

-> StudentResult INT(4) NOT NULL COMMENT '考试成绩'

-> )ENGINE=InnoDB DEFAULT CHARSET=UTF8 COMMENT '成绩表';

Query OK, 0 rows affected (0.22 sec)

相关推荐
cqsztech2 小时前
基于ORACLE LINUX 10.1 MYSQL 8.4 源码安装
linux·mysql·oracle
乐之者v2 小时前
mysql 的查询条件放在 join on 和 Where 的区别:
mysql
艾伦_耶格宇2 小时前
【zabbix】-2 zabbix本地部署
数据库·zabbix
麻花20132 小时前
Oracle 数据泵导出与还原操作指南
数据库·oracle
卤炖阑尾炎2 小时前
MySQL 全量、增量备份与恢复实战指南
mysql·adb
邂逅you2 小时前
SQL温故与知新
数据库·sql
zhangren024682 小时前
Laravel7.x新特性全面解析
数据库·mysql·adb·php
鸽芷咕2 小时前
Oracle替换工程实践深度解析:金仓数据库破解PL/SQL“零改造”迁移难题
数据库·sql·oracle
猿小喵2 小时前
MySQL数据库参数解读-第一篇
数据库·mysql·性能优化