MySQL的简介、启动及其DDL
MySQL的各项配置:
默认会启用TCP/IP网络;
默认客户端/服务器端口:3306;
将数据库的BIN目录写入Windows的的path环境变量;
默认不允许root用户在其他机器上远程登录;
MySQL正在使用的配置文件:my.ini,可以通过my.ini修改一些配置:
default-character-set=utf8 客户端默认字符集;
character-set-server=utf8 服务器默认字符集,即创建数据库和表的默认字符集;
port=3306 my.ini中有两个,即客户端和服务器端都指定为3306;
default-storage-engine=INNODB 默认存储引擎
1、SQL
SQL全称是结构化查询语言,是关系数据库的标准语言。
根据功能划分,SQL语言主要由以下几部分组成。
- DML——数据操纵语言,用来插入、修改和删除数据库中的数据。
- DDL——数据定义语言,建立数据库、数据库对象和定义其列。
- DQL——数据查询语言,对数据库中的数据进行查询
- DCL——数据控制语言,控制数据库组件的存取许可,存取权限等。如GRANT、REVOKE。
2、windows中启动、登录MySQL
(MySQL在默认的情况下查询是不区分大小写的,在配置修改后,需要重启服务才有效)
DOS启动服务:
net start mysql 启动MYSQL服务
net stop mysql 停止MYSQL服务
命令行登陆:(也可以通过MySQL自带的MySQL Command Line Client)
mysql –u root –p (接下里会提示输入密码)
ps:如果是连接到另外的机器上,则需要加入一个参数:-h 机器IP
3、显示基本信息:
status; 显示当前MySQL服务的运行状态
select version(); 显示当前MySQL版本
select current_date; 显示当前日期(大小写通用)
select now(); 显示当前日期、时间
select database(); 显示当前正在使用的数据库
help content 查看帮助文档目录列表
4、通过DDL进行数据库操作
show databases; 显示所有数据库
create database <database name>; 创建数据库
drop database <database name> 直接删除数据库,不提醒
mysql admin drop <database name> 删除数据库前,有提示
use <database name>; 选择数据库
show tables; 显示数据库中的所有表
5、创建表
/*建表的语法*/ create table [if not exist] Tablename( 字段一 数据类型 [字段属性|约束] [索引] [注释] , 字段二 数据类型 [字段属性|约束] [索引] [注释] , ......... )[表类型][表字符集][注释] /*创建一个InnoDB类型,字符集为utf-8,备注为“test Table”的表*/ /*在这里,我惊喜地发现,单引号、双引号可以使用在comment关键字中!!*/ create table test(id int(4))engine=innodb,charset=utf8,comment="test Table";
通过使用MySQL WorkBench,终于找到了标准语法:
/*在5.7版本中,数据库名称、表的名称都可以用``包围,加强表达,也可以不加*/ CREATE TABLE `myschool`.`test`(`id` INT(4) NOT NULL DEFAULT 1 COMMENT '测试编号', PRIMARY KEY (`id`)); /*现在创建一个有各种属性的表*/ /*id类型为int()4,非空,默认值为1,名为测试编号*/ /*这里指定PK的方式为在定义完所有字段后指定*/ CREATE TABLE `myschool`.`mytsest` ( `id` INT(4) NOT NULL DEFAULT 1 COMMENT '测试编号', PRIMARY KEY (`id`)) ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COMMENT = '测试表'; /*我还发现,自增AI和默认Default是冲突的,至少这里是,可能因为AI指定了默认值*/
SQL为字段提供了各种约束和属性来保证数据的完整性。
其中主键约束是十分重要的约束,可以使用数据库表中的某一字段or几个字段来唯一标识所有记录。
(1)单字段主键
/*在定义字段的同时指定主键*/ create table student( studentNumb INT(4) PRIMARY KEY, ..... ) /*在定义完所有字段后指定主键*/ create table student( studentNumb INT(4), studentName VARCHAR(45), .... PRIMARY KEY(id) )
(2)多字段联合主键
/*主键由多字段组成*/ create table student( id INT(4), name VARCHAR(11), ... PRIMARY KEY(id,name) )
(3)为表添加注释、设置编码格式
create table student( id INT(4) COMMENT '编号', name VARCHAR(11), ... PRIMARY KEY(id,name) )ENGINE=InnoDB,CHARSET=UTF-8,COMMENT ='学生表'
6、查看表
show tables;
describe <table name>; 展示表的结构
desc <table name>; 展示表的结构
select * from <table name> 显示表中的内容
DOS窗口默认字符集为GBK格式,如果当前MySQL的默认编码格式非GBK,可能会乱码,可以在输出信息之前执行以下语句:
set names gbk;
7、修改表结构
首先,可以执行“HELP ALTER TABLE”查看各种需改表结构的语句
(1)修改表名
alter table student rename studentinfo;
(2)添加字段(默认添加到末尾)
/*经过检验,本版本中,新增字段时的字段名无需添加引号(单、双都会报错)*/ alter table student add province varchar(30); /*指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)*/ alter table student add city varchar(20) after province;
(3)修改字段——修改字段名和字段属性
/*只修改字段的属性*/ /*把字段province的类型从varchar(30)改为varchar(20)*/ alter table student modify province varchar(20); /*name为修改后的字段名,同时可以修改字段属性,也可以和原有的一致,但是不能为空*/ alter table student CHANGE country city char(20) not null; /*在我的机器上,这个语句报错不能执行。因为我在第一次定义country字段时,只设置了字段类型一个属性,NN属性并没有设置;现在修改后,我新增了NN属性,报错!*/ alter table student change country city varchar(20); /*修改后,执行成功!country属性名改为了city*/ /*此外,目前为止,所有为名字添加引号的操作都是不必要的,甚至都是报错。这与书本的实例完全不同*/
(4)删除字段——将table中的某个字段从表中移除
/*数据表中只剩余一个字段则无法使用DROP来删除字段*/ alter table student drop city;
(5)添加主键约束
/*语法如下*/ alter table <TableName> add constraint <主键名> primary key <表名>(<主键字段>); /*将grade表中的gradeId设置为主键*/ alter table grade add constraint pk_grade primary key grade(gradeId);
(6)添加外键约束
/*语法如下*/ alter table <TableName> add constraint <外键名> foreign key <外键字段>references <关联表名>(<关联字段>); /*设置student表的gradeID字段与grade表的gradeId字段建立主外键关联*/ alter table student add constraint fk_student foreign key gradeId references grade(gradeId); /*InnoDB类型的表才支持主、外键约束,因此保证相关表都为InnoDB型*/ /*对于MyISAM类型的表,可以通过建立逻辑关系保证数据的完整性和一致性*/
8、删除表
delete from <table name>; 清空表中内容
drop table if exists <table name> 删除表(操作之前确认是否有重要数据,可以先备份)
9、使用MySQL系统帮助文档
help contents;
再使用help命令查看相关的具体内容。