mysql
-
什么是数据(data):硬盘中存的东西......
-
数据库:
- 数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务
-
数据库的优点
- 数据按照一定的数据模型组织描述和存储
- 可为各种用户共享
- 冗余度较小,节省存储空间
- 易扩展,编写有关数据库管理
-
数据库管理系统(Database Management System)
- 是一种操纵和管理数据库的大型软件,适用于建立使用和维护数据库,简称DBMS。
- 作用:他对于数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
-
mysql命令
mysql -h host_name -u user_name -ppassword
mysql-h:当前连接服务器不在同台主机时,填写主机名或IP地址
mysql-u:登录mysql用户名
mysql-p:登录mysql密码
登录过程mysql -u root -ppassword show databases;//显示所有数据库 use XXX; show tables;//显示所有的表 select * from XXX;//进入查看该表 \q:退出
-
数据库由一批数据构成的有序集合,这些数据被分门别类的存放在一些结构化的数据表里(table)里,而数据之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库
-
数据存储的完整性
- 有一对必选的有一堆可选的方案以保持完整性。
- 约束方法:唯一约束、主键约束、标识列
- 约束方法:限制数据类型、检查约束、外键约束(保证程序表中的数据不孤立)、默认值、非空约束。
- 约束方法:规则,存储过程,触发器。
-
完整性包括
- 输入的类型是否正确?
- 输入的格式是否正确?
- 是否在允许的范围内?
- 是否存在重复输入?
- 是否符合其他特定要求?
SQL
- 什么是SQL(Structured Query Language(结构化查询语言))
- SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。
- SQL语句
- SQL用;结尾,否则认为语句未结束
- ->代表SQL语句未结束
- 取消SQL语句用\c
- SQL语句关键字和函数名不区分大小写(Linux区分,Windows不区分)
- 使用函数时,函数名和后面的括号之间不能有空格
-
使用字符串需要转义字符
Paste_Image.png
数据类型
- CHAR和VARCHAR类型
- CHAR类型和VARCHAR类型长度都是0~255之间的大小,他们之间的差别是mysql处理存储的方式
- CHAR把这个大小视为值得准确大小,(用空格填补比较短的值)
- VARCHAR把它视为最大值并只使用字符串实际使用的需要字节数,较小的值存入VARCHAR类型的字段时,将不会用空格填补。(较长值仍然会被截断)
- 数值列类型
-
mysql为除了NULL值外的所有通用数据提供了列类型。列类型是一种手段,通过该手段可以描述表类需要什么类型的表。
Paste_Image.png
Paste_Image.png
-
-
时间和日期类型
Paste_Image.png
- 说明
- 每个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加
- 表示日期时必须先按:年,月,日的顺序给出
- DATE ,TIME ,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为“YYYY-MM-DD”,“hh:mm: ss”和“YYYY-MM-DD hh:mm: ss”,对于DATETIME类型,日期和时间部分都需要
TIMESTAMP - 时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录
- 说明
表
- 创建表
:create table 表名(
列名1 列类型 [<列的完整性约束>],
列名2 列类型 [<列的完整性约束>],
... ... );
create database test01;//创建名为test01的库
use test01;//进入库
show tables;//查看库内有几张表
creat table data11(showtime time);//创建一行一列的表,表名data11,列名show time
insert into data11 values('11:11:11'),('11:11'),(111111);//插入数据
select * from data11;//查看表

create table data12(f_data date,f_time);
insert into data12 (f_data,f_time) values('1978-4-6',123421),(650503,'3:4:1');

create table data12(f_data date,f_time);
insert into data14('1999-11-11 11:11:11','2002-11-11 11:11:11');
insert into data14 values(now(),null);

create table t1(num1 int not null,num2 int);
insert into t1(-1,-2) values(10);

create tablet2(num1 int null,num2 int)
insert into t2(num2) values(10);

create table t3(num1 int default 100,num2 int);
insert into t3(num2) values(2);

create table t4(num2 int zerofill);
insert into t4 values(2);

create table t5(num1 int unique,num2 int);
insert into t5 values(1,2);
insert into t5 values(1,2);

create table t6(num1 int auto_increment unique not null,num2 int);
insert into t6 (num2)values(10);
insert into t6 (num2)values(10);
insert into t6 (num2)values(10);

insert into t6 values(100,10);
insert into t6 (num2)values(10);

delete from t6;
insert into t6 (num2)values(10);

引用完整性
-
主键和外键
- 数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。
- 主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。
- 主键必须是唯一的
- 主键应该是紧凑的,因此整数类型比较适合
- 外键:引用另外一个数据表的某条记录。
- 外键列类型尽可能与主键列类型保持一致
- 外键列应该加上NOT NULL
-
注意点
- 当主表中没有对应的记录时,不能将记录添加到子表
- 不能更改主表中的值而导致子表中的记录孤立
- 子表存在与主表对应的记录,不能从主表中删除该行
- 删除主表前,先删子表
-
插入insert
- 直接在外键插入信息,会报错
主键 create table student( sid int not null auto_increment, name varchar(20) not null, primary key(sid) ); 外键(自动检查外键是否匹配,仅适用InnoDB) create table score( cid int not null auto_increment primary key, score int, sid int, foreign key(sid) references student(sid) );
insert into score (score,sid) values(100,1);
Paste_Image.png
insert into student (name) values('ssh');
Paste_Image.png
insert into score (score,sid) values(100,1);
Paste_Image.png
- 直接删除主键会报错
delete from studnet; drop from student;
Paste_Image.png
- 插入中文
create table t7(name char(20),id int); insert into t7 values('ssh',1); insert into t7 values('孙苏徽',1);
Paste_Image.png
create table t7(name char(20),id int) default charset=utf8; insert into t7 values('ssh',1); insert into t7 values('孙苏徽',1);
Paste_Image.png
更改表结构
- add 列名 建表语句 [first | after 列名]
- 可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列
- add primary key (列名)
- 为表添加一个主键,如果主键已经存在,则出现错误
- add foreign key(列名) references
- 表名(列名)为表添加一个外键
- alter 列名 set default 默认值
- 可以更改指定列默认值
- change 旧列名 新列名 <建表语句> [first | after 列名]
- 可以更改列类型和列名称,如果原列的名字和新列的名字相同
- modify 列名 <建表语句> [first | after 列名]
- 和change的作用相同
- drop 列名 //可以删除一列
- drop primary key //可以删除主键
- engine 类型名 //可以改变表类型
- rename as 新表名 //可以将表名更改
- alter各种使用
- 新建一个列
alter table t8 add address int after name; desc t8; select * from t8;
Paste_Image.png
- 设address默认值
alter table t8 alter address set default 100; desc t8;
Paste_Image.png
- change id为number 属性char(20)
alter table t8 change id number char(20); desc t8; select * from t8;
Paste_Image.png
Paste_Image.png
- change name 属性
alter table t8 change name name int; desc t8; select * from t8;
Paste_Image.png
- modify使用
alter table t8 modify name char(20);
Paste_Image.png
- drop使用
alter table t8 drop address;
Paste_Image.png
- rename使用
alter table t8 rename as t9;
Paste_Image.png
mysql运算符
- select
- select 与binary
select 'x'<>'X'; select binary 'x'<>'X';
Paste_Image.png
- between
select 10 between 10 and 100;
Paste_Image.png
select 'x' between 'a' and 'z';
Paste_Image.png
select 7 in(1,2,3,4,5,6,7); select 7 in(1,2,3,4,5,6);
Paste_Image.png
- NULL
- IS NULL 或者 IS NOT NULL来测定是否为空
-
可以使用特殊的<=>运算符,MySQL称为”NULL安全的等于”运算符。这意味着即使当包含在比较运算符中的表达式含有一个NULL值时,MySQL也会为比较运算符返回一个真值或假值。
Paste_Image.png
- 通配符
- “%” (百分号) 代表任意长度(长度可以为0)的字符串
- a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
- “_”(下横线) 代表任意单个字符
- a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
select 'mysql' like '%SQL',binary 'mysql' like '%SQL'
Paste_Image.png
- “%” (百分号) 代表任意长度(长度可以为0)的字符串
网友评论