创建数据库:
格式:
create database 数据库名;
create database 数据库名 character set 字符集;
查看所有数据库:
show databases;
查看某个数据库的定义信息:
show create database 数据库名;
切换数据库:
use 数据库名;
删除数据库:
drop database 数据库名称;
创建表:
create table 表名(
字段名 类型(长度) [约束],
字段名 类型(长度) [约束],
...
);
如:
create table student(
sid int,
sname varchar(32)
)
重点:
varchar是可变长度字符串类型
而char是不可变长度字符串类型
如:
char(10):可以存储10位的字符,如果存入aaa,那么char所占的长度还是10
而varchar会将长度改变为4
char存储比varchar要快
总的来说就是varchar功能性强而char效率高
类型:
varchar(n) 字符串
int 整形
double 浮点
date 时间
timestamp 时间戳
查看数据库中的所有表:
格式:show tables;
查看表结构:
格式:desc 表名;
例如:desc sort;
修改表结构:
alter table 表名 add 列名 类型(长度) [约束];
作用:添加列.
alter table 表名 modify 列名 类型(长度) [约束];
作用:修改表修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) [约束];
作用:修改列名.
alter table 表名 drop 列名;
作用:删除列.
alter table 表名 rename to 新表名;
作用:修改表名
alter table 表名 character set 字符集;
作用:修改表的字符集
删除表:
格式:drop table 表名;
插入数据:
-- 向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
--向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values (值1,值2,值3..);
更新表记录:
--更新所有记录的指定字段
update 表名 set 字段名=值,字段名=值,...;
--更新符号条件记录的指定字段
update 表名 set 字段名=值,字段名=值,... where 条件;
删除记录:
delete from 表名 [where 条件];
或者
truncate table 表名;
重点:
delete和truncate的区别
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
条件查询
去除重复关键字:distinct
MYSQL数据类型
日期类型
字符串二进制文本类型:
DOS操作数据乱码解决:
查看MySQL内部设置的编码
show variables like 'character%'; 查看所有mysql的编码
修改client、connection、results的编码一致(GBK编码)
client connetion result 和客户端保持一致,都为GBK
将客户端编码修改为gbk.
方式1:单独设置
set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_results=gbk;
方式2:快捷设置
set names gbk;
约束
添加主键约束
方式一:创建表时,在字段描述处,声明指定字段为主键:
CREATE TABLE Persons
(
Id_P int PRIMARY KEY,
--primary key设置主键 主键在该表中不能为空,
--不能重复,是一个条数据的唯一标识
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式二:创建表时,在constraint约束区域,声明指定字段为主键:
格式:[constraint 名称] primary key (字段列表)
关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段为主键,我们称为联合主键。
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (FirstName,LastName)
或
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (FirstName)
)
方式三:创建表之后,通过修改表结构,声明指定字段为主键:
ALTER TABLE Persons ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255)
)
ALTER TABLE Persons ADD PRIMARY KEY (FirstName)
删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY
自动增长列
CREATE TABLE Persons
(
P_Id int PRIMARY KEY AUTO_INCREMENT,
--自增长约束 添加时该列如果为空会自动给值 1 2 3···依次
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
默认地,AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
非空约束
方式一:创建表,下面的 SQL 语句强制 “Id_P” 列和 “LastName” 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式二:修改表结构
添加非空约束 ALTER TABLE student MODIFY LastName varchar(255) NOT NULL
删除非空约束 ALTER TABLE student MODIFY LastName varchar(255)
唯一约束
方式1:创建表时,在字段描述处,声明唯一:
CREATE TABLE Persons
(
Id_P int UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式2:创建表时,在约束区域,声明唯一:
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT 名称UNIQUE (Id_P)
)
方式3:创建表后,修改表结构,声明字段唯一:
ALTER TABLE Persons ADD [CONSTRAINT 名称] UNIQUE (Id_P)
删除唯一约束
ALTER TABLE Persons DROP INDEX名称
如果添加唯一约束时,没有设置约束名称,默认是当前字段的字段名。
默认约束
方式一: 创建表,字段处声明
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255) DEFAULT '北京',
City varchar(255)
)
方式二: 修改表结构
ALTER TABLE Persons MODIFY Address VARCHAR(255) DEFAULT '北京'
删除默认约束ALTER TABLE Persons MODIFY Address VARCHAR(255)
多表查询
内连接查询:
隐式内连接:select * from A,B where 条件;
显示内连接:select * from A inner join B on 条件;
左外连接查询:
select * from A left outer join B on 条件;
右外连接查询:
select * from A right outer join B on 条件;
From 表名 把数据从硬盘加载到内存中形成一张伪表
On 条件 根据on条件对伪表及其他表进行扫描拼接,拼接成一张完整的新伪表