初识MySQL

96 阅读9分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

1.数据库和应用程序

应用程序

作用:响应操作并显示结果、向数据库请求数据 
要求:美观、操作简单方便

数据库

作用:存储数据、检索数据、生成新的数据 
要求:统一、安全、性能等

SQL Server

针对不同用户群体的多个版本
易用性好

MySQL

开放源代码 
网站应用广泛

MySQL的优势:

运行速度快 
使用成本低 
可移植性强 
适用用户广

3.数据库的基本概念

数据库就是“数据”的“仓库 ” 
数据库中包含表、关系以及操作对象 
数据存放在表中

4.数据库管理系统(DBMS:data base manage system)

5.打开windows服务:Windows+r 输入services.msc

6.连接数据库时操作步骤:

(1.)首先打开管理员权限的cmd,输入net start musql80 开启服务(电脑每次重启都需要开启服务),然后再进普通权限的cmd,输入第(2)或(3)步骤里面的命令,如下:

(2)mysql -u root -p(-u 用户名 -p(密码) 注意:这是默认登录当前电脑省略了IP地址和端口号3306)

(3)mysql -h localhost -u root -P 端口号 -p

7.127.0.0.1或localhost(本机测试回环地址)

mysql -h 127.0.0.1

8.flush privileges:

(刷新缓冲区(设置了mysql相关配置之后,调用该命令就可以不需要重新启动mysql服务,使配置立即生效))

9.net start 服务名(例如:mysql80)(windows服务在管理员权限打开的cmd命令提示符里的启动服务命令)

net stop 服务名(例如:mysql80) :停止服务 
net start 服务名(例如:mysql80) :启动服务 
net restart 服务名(例如:mysql80) :重启服务

10.结构化查询语言:SQL(Structured Query Language)

 名称解释命令举例
DML(数据操作语言)用来操作数据库中所包含的数据INSERTUPDATEDELETE
DDL(数据定义语言)用于创建和删除数据库对象等操作CREATEDROPALTER
DQL(数据查询语言)用来对数据库中的数据进行查询SELECT
DCL(数据控制语言)用来控制数据库组件的存取许可、存取权限等GRANTCOMMITROLLBACK

11.SQL中的运算符

一种符号,它是用来进行列间或者变量之间的比较和数学运算 包括算术运算符、赋值运算符、比较运算符、逻辑

运算符说    明
+加运算,求两个数或表达式相加的和,如6+8
-减运算,求两个数或表达式相减的差 
*乘运算,求两个数或表达式相乘的积 
/除运算,求两个数或表达式相除的商,如5/3的值为1
%取模运算,求两个数或表达式相除的余数,如:5%3的值为2

赋值运算符:=

把一个数或变量或表达式赋值给另一变量,如:Name='王华'

逻辑运算符

说     明
AND当且仅当两个布尔表达式都为true时,返回TRUE。
OR当且仅当两个布尔表达式都为false,返回FALSE。
NOT布尔表达式的值取反

比较运算符

运算符说     明
=等于,例如:age=23 
大于,例如:price>100 
<小于 
<>不等于
>=大于等于
<=小于等于
!=不等于(非SQL-92标准 )

12.创建数据库

语法: CREATE DATABASE 数据库名;

示例:

CREATE DATABASE myschool; 13.查看数据库列表

语法:

SHOW databases; 14.选择数据库

语法:

USE 数据库名;

示例:

USE mybase; USE myschool; 15.删除数据库

语法:

DROP DATABASE 数据库名; DROP DATABASE myschool;

16.安装mysql压缩包版本

1.下载相关压缩包版本 2.编写my.ini配置文件好之后并保存到解压好的mysql文件夹里 3. 管理员启动CMD,输入安装windows服务命令:sc install 服务名(安装windows服务) net start 服务名 4. 4.服务启动失败,自己找错误代码原因 5. 5.删除:以管理员的身份启动cmd =>进入mysql 的 bin 路劲 => 输入mysqld --remove,添加成功之后执行net stop mysql 命令关闭mysql服务

17.MySQL数据类型

 类型说明取值范围存储需求
TINYINT非常小的数据有符值: -27 ~ 27-1  无符号值:0 ~ 28-1                                1字节
SMALLINT较小的数据有符值:  -215 ~ 215-1  无符号值:  0 ~ 216-1       2字节
MEDIUMINT中等大小的数据有符值:  -223 ~ 223-1  无符号值:  0 ~ 224-1       3字节
INT标准整数有符值: -231 ~ 231-1  无符号值:0 ~ 232-1       4字节
BIGINT较大的整数有符值: -263 ~263-1无符号值:0 ~264-1       8字节
FLOAT单精度浮点数±1.1754351e -384字节
DOUBLE双精度浮点数±2.2250738585072014e -3088字节
DECIMAL字符串形式的浮点数(用于涉及到金钱的计算,不会丢失精度)Decimal(M,D)M+2个字节

(1) UNSIGNED属性 标识为无符号数 示例:

CREATE TABLE tb_type ( sid INT(4) ZEROFILL); INSERT INTO tb_type1 VALUE(12) ,(1234),(123456);

(2)ZEROFILL属性

宽度(位数)不足以0填充

(3)若某数值字段指定了ZEROFILL属性, 将自动添加UNSIGNED属性 18.字符串、日期类型

 字符串类型说明长度
CHAR[(M)]定长字符串M字节
VARCHAR[(M)]可变字符串可变长度
TINYTEXT微型文本串0~28–1字节
TEXT文本串0~216–1字节
日期类型格式取值范围
DATEYYYY-MM-DD,日期格式1000-01-01~ 9999-12-31
DATETIME YY-MM-DD  hh:mm:ss:1000-01-01 00:00:00 ~9999-12-31 23:59:59
TIMEhh:mm:ss: -835:59:59 ~ 838:59:59
TIMESTAMP(时间戳)YYYYMMDDHHMMSS1970年某时刻~2038年某时刻,精度为1秒
YEARYYYY格式的年份1901~2155

19.创建表

语法:

CREATE TABLE [IF NOT EXISTS] 表名 ( 字段1 数据类型 [字段属性|约束][索引][注释], …… 字段n 数据类型 [字段属性|约束][索引][注释] )[表类型][表字符集][注释];

示例:

#创建学生表 CREATE TABLE studentstudentNo INT(4) PRIMARY KEY, name CHAR(10), ……);

多字段使用逗号分隔

保留字用撇号括起来

单行注释:#...... 多行注释:/……/

20.字段的约束及属性

名称 关键字说明 
非空约束NOT NULL字段不允许为空
默认约束DEFAULT 赋予某字段默认值
唯一约束UNIQUE KEY(UK) 设置字段的值是唯一的 允许为空,但只能有一个空值
主键约束PRIMARY KEY(PK)设置该字段为表的主键可唯一标识该表记录
外键约束FOREIGN KEY(FK) 用于在两表之间建立关系, 需要指定引用主表的哪一字段
自动增长AUTO_INCREMENT 设置该列为自增字段 默认每条自增1 通常用于设置主键

(1)主键

CREATE TABLE student( studentNo INT(4) PRIMARY KEY, ……);

(2.)注释

CREATE TABLE test ( id int(11) UNSIGNED COMMENT ‘编号’//注释此字段为编号字段 )COMMENT='测试表’ ;//注释此表为测试表

(3)设置字符集编码

CREATE TABLE [IF NOT EXISTS] 表名( #省略代码 )CHARSET = 字符集名;

21.创建学生表

/如果表存在,先删除/ DROP TABLE IF EXISTS student; /创建学生表/ CREATE TABLE student ( studentNo int(4) primary key auto_increment comment '学号', loginPwd varchar(20) not null comment '密码', studentName varchar(50) not null comment '姓名', sex char(2) not null default '男' comment '性别', gradeID int(4) comment '年级表ID外键', phone varchar(50) comment '电子邮箱', address varchar(255) default '地址不详' comment '地址', bornDate datetime, email varchar(50) comment '电子邮箱', iddentityCard varchar(18) unique key comment '身份证号' );

22.查看表(避免DOS窗口乱码,可执行SET NAMES gbk;)

(1)查看表是否存在

示例:

USE myschool; SHOW tables;

(2)查看表定义

DESCRIBE 表名; 或 DESC 表名;

示例:

USE myschool; DESCRIBE student;

23.删除表(在删除表之前,先使用IF EXISTS语句验证表是否存在 )

语法:

DROP TABLE [IF EXISTS] 表名;

示例:

USE myschool; DROP TABLE IF EXISTS student;

24.修改表(重点)

#修改表名 ALTER TABLE 旧表名 RENAME [TO] 新表名; #添加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [属性]; #修改字段 ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性]; #删除字段 ALTER TABLE 表名 DROP 字段名;

25.添加主键

语法一:(后期想要设置字段为主键的添加方法,原来不存在)

ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段);

示例:设置grade表中gradeID字段为主键

ALTER TABLE grade ADD CONSTRAINT pk_grade PRIMARY KEY grade(gradeId);

语法二:(建表时就直接添加的方法)

id int(4) primary key auto_increment comment '年级编号',

26.添加外键

语法:

ALTER TABLE 从表表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 主表表名(关联字段);

示例:将student表的gradeID字段和grade表的gradeID字段建立外键关联

ALTER TABLE student ADD CONSTRAINT fk_student_grade FOREIGN KEY(gradeId) REFERENCES grade (gradeId);

27.MySQL系统帮助

语法:

HELP 查询内容;

示例:

HELP contents; HELP Data Types; HELP INT;

28.总结

/如果表存在,先删除/ DROP TABLE IF EXISTS student; /创建学生表/ CREATE TABLE student ( studentNo int(4) primary key auto_increment comment '学号', loginPwd varchar(20) not null comment '密码', studentName varchar(50) not null comment '姓名', sex char(2) not null default '男' comment '性别', gradeID int(4) unsigned comment '年级表ID外键', phone varchar(50) comment '电子邮箱', address varchar(255) default '地址不详' comment '地址', bornDate datetime, email varchar(50) comment '电子邮箱', iddentityCard varchar(18) unique key comment '身份证号' ); /查看表/ show tables; /查看表定义/ describe myschooltwo; desc myschooltwo; /创建年级表,创建前先删除表/ drop table if exists grade; /创建年级表/ create table grade ( id int(4) primary key auto_increment comment '年级编号', gradeName varchar(10) comment '年级名称' ); /创建科目表和成绩表/ drop table if exists subject; create table subject ( subjectNo int(4) primary key auto_increment comment '课程编号', subjectName varchar(50) comment '年级编号', classHour int(4) comment '学时', gradeID INT(4) comment '年级编号' ); drop table if exists result; create table result ( studentNo INT(4) not null comment '学号', subjectNo INT(4) not null comment '课程编号', examDate DATETIME not null comment '考试日期', studentResult INT(4) not null comment '考试成绩' ); /学号、课程编号、考试日期构成组合主键/ alter table result add constraint pk_result primary key result(studentNo,subjectNo,examDate); /主表student和从表result通过studentNo字段建立主外键关联/ alter table result add constraint fk_student_result foreign key(studentNo) references student (studentNo); /删除外键约束/ alter table result drop foreign key fk_student_result; /创建test数据库/ create database test; /创建person表,创建前先删除表/ drop table if exists person; create table person ( number INT(4) primary key AUTO_INCREMENT comment '序号', name varchar(50) not null comment '姓名', sex char(2) comment '性别', bornDate DATETIME comment '出生日期' ); /将表名修改为tb_person/ alter table person rename tb_person; /删除出生日期字段/ alter table tb_person drop bornDate; /添加出生日期字段,数据类型为date/ alter table tb_person add bornDate date; /修改序号字段名(number) 为id,类型为bigint/ alter table tb_person change number id BIGINT; /创建表demo01,创建前先删除/ DROP TABLE IF EXISTS demo01; /创建表/ create table demo01( id int(10) not null primary key auto_increment comment '编号', name varchar(8) not null comment '姓名' ); /修改表名/ alter table demo01 rename demo02; /添加字段/ alter table demo02 add password varchar(32) not null; /修改字段/ alter table demo02 change name username char(10) not null; /删除字段/ alter table demo02 drop password;