慕课网视频笔记
MySQL数据类型:数据类型是指列、存储参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
数据类型:
- 整型
- 浮点型
- 日期类型
- 字符型
整型:
- TINYINT
- SMALLINT
- MEDIUMINT
- INT
- BIGINT
浮点型:
- float
- double
日期时间型:
- YEAR
- TIME
- DATE
- DATETIME
- TIMESTAMP(时间戳 )
字符型:
- CHAR(定长型)
- VARCHAR(变长型)
- TINYTEXT
- TEXT
- MENDIUMTEXT
- LONGTEXT
- ENUM(’value1’,’value2’,…)(枚举值)
- SET(‘value1’,’value2’,…)(集合)
操作数据表:
数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础。
#打开数据库
USE 数据库名称; #打开数据库,数据库必须事前存在
mysql -uroot -p #登录mysql
use test; #打开数据库
show tables; #展示数据库里面的所有表
#显示当前打开的是哪个数据库
SELECT DATABASE();
select database();
#创建数据表
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
...
)
create table demo01(
name varchar(20),
age tinyint(10) unsigned,
grade tinyint(10)
);
注:unsigned表示无符号的意思,也就是非负数,只用于整型。
#查看数据表
SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]
show tables;
#查看数据表结构(两种方法)
SHOW COLUMNS FROM tbl_name
DESC tbl_name;
show columns from test1;
desc test1;
#记录的插入与查找
INSERT [INTO] tbl_name [(col_name,...)] VALUES (val,...)
insert demo01 values("a",18,88);
insert test1 values(4,"yangyang",23);
假如表test1 id自动标号,我们就可以这样插入数据:insert test1(namea,age) values("yangyang",23);
#其中(name,age)不能省略。
insert demo01 (name,age) values("b",19)
#记录查找
SELECT expr,... FROM tbl_name
select name from demo01;
#MySQL空值与非空
NULL 字段值可以为空
NOT NULL 字段值禁止为空
create table tb2(
username varchar(20) not null,
age int(10) null,
)
MySQL自动编号 AUTO_INCREMENT,自动编号,且必须与主键组合使用 ,默认情况下,起始值为1,每次增量为1。
#MySQL主键约束 PRIMARY KEY
主键约束
每张数据表只能存在一个主键
键保证记录的唯一性
主键自动为NOT NULL
主键的赋值不能相同(比如name为主键,不能出现两个重名的人,1赋值Tom,2也赋值TOM)
AUTO_INCREMENT一定要与主键联合使用,但是定义的主键不一定要使用AUTO_INCREMENT。
create table tb3(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL
);
#AUTO_INCREMENT要和PRIMARY KEY一起使用。且PRIMARY KEY自动设置为NOT NULL。
对于设置自动增加的数据,我们可以这样插入数据:insert test1(namea,age) values("yangyang",23);
#其中(name,age)不能省略。
#UNIQUE KEY 唯一约束
唯一约束
唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束
注:unique key可以为空,但是一旦为空则整条记录为空(所以就别费工夫给unique key为空的行插入别的值了)。也就是说你插入了再多的null,也只有一个null,所以不会重复。
注:這個没表述清楚、主键約束只有一個,唯一約束可以有多個,針對的是整個表的結構,意思是,每個表只能有一個主键約束;每個表中可以有多個唯一約束,比如每個人,眼睛,鼻子,嘴巴都不一樣,都可以作為唯一約束;另外又說都只能有一個,是針對表裡面的數據,每個數據只能有一個,比如已經有一個大眼睛了,再插入一條大眼睛的數據就不行了、這個也是唯一約束的作用。【比如username 添加 UNIQUE之后 ,在添加记录时 记录1 username为Tom, 记录2 username也为Tom 这样是不允许的。】
#主键约束和唯一约束 的一张表
create table tb4(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
agr TINYINT UNSIGNED
);
主键约束可以理解为你可以通过主键来查询一条唯一的记录,因为主键是唯一的。
唯一约束规定的是你定义的字段不能出现重复,比如username添加UNIQUE之后,在添加记录时 记录1 username为Tom,记录2 username也为Tom这样是不允许的。
#DEFAULT 默认约束
默认值
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
sex ENUM('1','2','3') DEFAULT '3'
create table tb5(
sex ENUM("1","2","3") DEFAULT "3" #sex设置为1(男)2(女)3(保密),3保密是默认状态
);
insert tb5(username) values("TOM");
关于为含有DEFAULT|ENUM的表插入数据:
尝试之后发现两个问题:
1.id虽然设置自增,但是我插入数据时候可以随意写入(我的id顺序是1,3,5,7这种也没报错)。
2.对于sex我尝试插入4这个值,没有报错,只有warning,但是查看表sex里面没有值,也就是说sex插入的值,必须是ENUM里面选。
总结:
MySQL基础:
cls清屏CMD窗口
SQL语句中的注释comment:
create table test1 (
field_name int comment '字段的注释'
)comment='表的注释';
其实desc users2与SHOW COLUMNS FROM users2是一样的,都是查表结构。
MySQL目录结构:
- MySQL目录结构
- bin目录,存储可执行文件
- data目录,存储数据文件
- docs,文档
- include目录,存储包含的头文件
- lib目录,数据库文件
- share,错误消息和字符集文件
MySQL的配置选项(my.ini文件中,client是客户端,mysqld是服务器端):
- 修改编码方式(注意是utf8)
[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8
启动与停止MySQL服务:
- 启动MySQL服务 net start mysql
- 停止MySQL服务 net stop mysql
MySQL启动中出现的问题
1.执行net start mysql,提示“服务名无效”。
因为net start +服务名,启动的是win下注册的服务。此时,我系统中并没有注册mysql到服务中。我们可以去设备管理器查看本机服务。
那么怎么将MySQL注册到windows服务里面呢?
- 以管理员的身份运行cmd窗口,到MySQL安装目录的bin目录下
- 在命令行窗口输入mysqld –install,回车就可以了
2.执行net start mysql ,提示系统错误5,拒绝访问。
- 以管理员的身份运行cmd窗口,再执行net start mysql 就可以了。
MySQL登录:
mysql 参数
-D,--datebase=name 打开指定数据库
--delimiter = name 指定分隔符
-h, --host=name 服务器名称
-p,--password[=name] 密码
-P,--port=# 端口号
--prompt=name 设置提示符
-u,--user=name 用户名
-V,--version 输出版本信息并且退出
//root用户登陆
mysql -uroot -p
mysql -uroot -p -P3306 -h127.0.0.1
MySQL退出:
- exit
- quit
- \q
修改MySQL提示符(两种方法):
- 1.连接客户端时通过参数指定
mysql -uroot -proot –prompt 提示符(u是用户名,p是密码)
mysql -uroot -proot -prompt \h - 2.连接上客户端后,通过prompt命令修改
prompt 提示符
mysql可以跟的提示符:
- \D 完整的日期
- \d 当前数据库
- \h 服务器名称
- \u 当前用户
例如:
mysql -uroot -proot --prompt \h
localhost
MySQL常用命令以及语法规范:
- 显示当前服务器版本
SELECT VERSION(); - 显示当前日期时间
SELECT NOW(); - 显示当前用户
SELECT USER() ;
代码示例:
mysql -uroot -p #登录
USE test
SELECT VERSION(); #显示当前服务器版本
SELECT NOW(); #显示当前日期时间
MySQL语句的规范:
- 关键字与函数名称全部大写(推荐)
- 数据库名称、表名称、字段名称全部小写(推荐)
- SQL语句必须以分号结尾
操作数据库:
{ }表示一定要有,|表示做选择,[ ]表示可选。
#创建数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
#如果数据库已经存在,再使用上面IF NOT EXISTS这句语句,会忽略错误,没有这句话会报错
create database t1;
create database t1 character set utf8;
#查看当前服务器下的数据库列表
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]
show databases;
#查看创建的数据库(t1)的编码方式
SHOW CREATE DATABASE t1;
show create database demo;
#数据库修改
ALTER {DATABASE | SCHEMA} [db_name] [DAFAULT] CHARACTER SET [=] charset_name
alter database t3 character set gbk;
show create database t3;
#删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
drop database t1;
#查看警告信息
SHOW WARNINGS;
show warnings;
基本操作代码示例:
//登陆mysql
mysql -uroot -p;
//查看所有数据库
show databases;
//进入指定数据库
use 数据库名称;
//查看数据库里面的所有的表
show tables;