问:MySQL默认的端口号是: 答:3306
问:MySQL中的超级用户叫什么? 答:root
MySQL退出:
1、exit;
2、quit;
3、\q
连接客户端时通过参数指定:
shell>mysql -uroot -proot --prompt提示符
例:如果提示符是“\h”,这代表的是服务器的名称
连上客户端后,通过prompt命令修改:
mysql>prompt 提示符
localhost是本地主机的意思
MySQL提示符
- \D 完整的日期
- \d 当前数据库
- \h 服务器名称
- \u 当前用户
MySQL常用命令
- 显示当前服务器版本
- SELECT VERSION();
- 显示当前日期
- SELECT NOW();
- 显示当前用户
- SELECT USER();
MySQL语句的规范
- 关键字与函数名称全部大写
- 数据库名称、表名称、字段名称全部小写
- SQL语句必须以分号结尾
数据库的操作
mysql自带四种数据库
1、创建数据库
CREATE{DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[DEFAULT] CHARACTER SET [=] charset_name
其中“{}”代表必须要选择的 “|”代表是可选的
db_name必须要有的
2、查看当前服务器下的数据表列表
SHOW {DATABASES | SCHEMAS}
[LIKE ‘pattern’ | WHERE expr]
3、修改数据库
- ALTER {DATABASES | SCHEMA} [db_name]
[DEFAULT] CHARACTER SET [=] charset_name
4、删除数据库
- DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
数据类型
- 数据类型是指:列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储形式,代表了不同的信息类型
show几个方法的比较
show columns from tb1是用来查看表结构的,查看表字段的类型,主键以及约束等,还可以使用desc tb1或者describe tb1效果一样
show create table t1是用来查看建表语句,通过这个语句我们可以用来查看表的存储引擎,以及字符编码,当然还有一点就是使用外键时,使用这个我们可以查看到外键的名称,这样我们如果想要删除外键,那么我们可以Alter table tb_name drop foreign key 外键约束名(show create table tb_name可以查看外键约束名称)
show indexes from tb1主要是用来查看表的索引的,我们在删除unique key时可以使用该命令来查看索引名称,通过Alter table tb_name drop index/key index_name(通过show index form tb_name查看index_name) 删除唯一约束
创建数据表
- 数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础。
USE命令
- 打开数据库
- USE数据库名称
创建数据表的命令
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
…
)
查看数据表列表
- SHOW TABLES[FROM db_name]
- [LIKE ‘pattern’ | WHERE expr]
其中 “FROM db_name” 表示的是不单止可以查看当前数据库下的数据表,还可以查看别的数据库下的数据表
查看数据表的结构
SHOW COLUMNS FROM tbl_name
插入与查找记录
- INSERT [INTO] tbl_name [(col_name,…)] VALUES(val,…)
自动编号 AUTO_INCREMENT
- 自动编号,且必须与主键组合使用
- 默认情况下,起始值为1,每次的增量为1
- 小数位数必须为0也就是说必须为整数
- 收到主键的约束
PRIMARY KEY(主键约束)
- 主键约束
- 每张数据表只能存在一个主键
- 主键保证记录的唯一性
- 主键自动为NOT NULL
- 主键不一定和 AUTO_INCREAMENT一起使用
UNIQUE KEY唯一约束
- 唯一约束可以保证记录的唯一性
- 唯一约束的字段可以为空值(NULL)
- 每张数据表可以存在多个唯一约束
- 即使存储多个空值,但是只有一个空值
默认约束 DEFAULT
- 默认值
- 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
约束
- 约束保证数据的完整性和一致性
- 约束分为表级约束和列级约束
只针对某一个字段的约束:列级约束
针对两个或者两个以上的字段约束:表级约束 - 约束类型包括:
NOT NULL(非空约束)
PRIMARY KEY(主键约束)
UNIQUE KEY(唯一约束)
DEFAULT(默认约束)
FOREIGN KEY(外键约束)
FOREIGN KEY
- 保持数据一致性,完整性
- 实现一对一或者一对多关系
外键约束的要求
- 父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
- 数据表的存储引擎只能为InnoDB。
- 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
- 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
外键:如果“公共关键字”(在关系数据库中,关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为两个关系的公共关键字)在一个关系中是“主关键字”(是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自另一个表中的特定记录),那么这个公共关键字被称为另一个关系的外键,由此可见,外键表示了两个关系之间的相关联系。
编辑数据表的默认存储引擎
MySQL配置文件(在my.ini):
default-storage-engine = INNODB
存储引擎就是数据的存储结构,表是在存储数据的同时,还要组织数据的存储结构,而这些数据的组织结构是由存储引擎决定的。即存储引擎的作用就是规定了数据存储时的存储结构。
MySQL支持的多种存储引擎,可以通过SHOW ENGINES来查看
常用有三种引擎:
1、默认的InnoDB
2、MyISAM
3、MEMORY
子表(从表):具有外键列的表(外键列:加入过FOREIGN KEY)
父表(主表):子表参照的表叫做父表
如果参照列没有索引的话,MySQL将会自动创建索引
出现150错误是因为和前面 proviences中的id中还有一个UNSIGNED,在这里当中在provience中的pid相当于一个外键,然后在proviences中的pname是参照列,pid是参照 id,所以provience是子类,proviences是父类
外键约束的参照操作
- CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
- SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子列表没有指定NOT NULL
- RESTRICT:拒绝对父表的删除或更新操作
- NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同
必须先在父表中来插入记录
在这里John的id之所以为4,是因为第一次添加失败之后,但是编号是自动递增了一个1
删除记录是用DELETE命令
定义两张表的结构的,按照存在两张表的结构去定义,而不是使用foreign-key定义,因为在另外的引擎当中,和INNDB是不同的
表级约束与列级约束
对一个数据列建立的约束,称为列级约束
对多个数据列建立的约束,称为表级约束
列级约束既可以在列定义时声明,也可以在列定义后声明
表级约束只能在列定义后声明
列定义:
其中PRIMARY KEY(‘id’) 就是列定义后面定义了一个主键(或者外键约束),开发过程中用列级约束是比较多的
DEFALUT NOT NULL只存在列级约束
修改数据表
添加单列:
ALTER TABLE tbl_name ADD [COLUMN] col_name
column_definition [FIRST| AFTER col_name]
如果没有声明在哪一列的上方还是下方的话,那么就会添加到最后
删除列:
ALTER TABLE tbl_name DROP [COLUMN] col_name
可以同时删除多个或者进行同时删除和添加的操作,需要的是逗号进行分割
修改数据表
添加主键约束:
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,…)
删除主键约束:
ALTER TABLE tbl_name DROP PRIMARY KEY;
删除唯一约束(UNIQUE):
需要注意的是唯一约束是可以有多个的
首先用 SHOW INDEXES FROM tbl_name; 查看
输入 ALTER TABLE tbl_name DROP INDEXES username;
注意删除的是约束,而不是字段!!!
删除外键约束:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
删除外键约束的索引:
ALTER TABLE tbl_name DROP INDEX pid;
修改列定义(若某个字段上出现了名字或者类型上的出错)
ALTER TABLE tbl_name MODIFY [COLUMN] col_name
column_definition [FIRST | AFTER col_name]
修改列名称
ALTER TABLE tbl_name CHANGE col_name new_col_name
column_definition
数据表更名
方法1:
ALTER TABLE tbl_name RENAME[TO| AS]new tbl_name;
方法2(对多张数据表进行修改):
RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2]…
如果为像“id”一样自动赋值的字段,可以不赋值(即赋值NULL)
“md5”是php的函数,计算字符串的哈希
插入多条记录的写法
INSERT第二种用法:
插入记录:
INSERT [INTO] tbl_name SET col_name = {expr |DEFAULT},…
说明:与第一种方法的区别在于,此方法可以使用子查询(subQuery)
这里的SET是指SELECT语句,这里就是将查找的结果存储到指定的数据表
另外的区别在于,第一种方式插入多条记录,这个只能插入一条记录
第三种用法:
INSERT [INTO] tbl_name [(col_name,…)] SELECT…
此方法可以将查询结果插入到指定数据表。
方法记录书写记录之后,如果发现值有错,需要更改使用UPDATE
UPDATE更新记录(单表更新)
UPDATE[LOW_PRORITY] [IGNORE]
以上是关于UPDATE(WHERE)的使用注意如果省去where条件,将会对整个表的数据进行操作
删除记录 DELETE
DELETE FROM tbl_name [WHERE where_condition]
delete同样和where一同使用,和update一样,如果省去了where条件,就会对整个数据表进行修改。
可发现用了DELETE语句之后,删除id = 6 然后再进行添加的时候,是在最大编号的+1
SELECT (查找记录)
SELECT select_expr [,select_expr…]
[
FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | position} [ASC | DESC],…]
[HAVING where_condition]
[ORDER BY {col_name | expr |position}[ASC | DESC],…]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
]
select_expr
查询表达式:
每一个表达式表示想要的一列,必须有至少一个。
多个列之间以英文逗号分隔
星号()表示所有列。 tbl_name. 可以表示命名表的所有列。
查询表达式可以使用[AS] alias_name为其赋予别名。
别名可用于GROUP BY, ORDER BY 或 HAVING子句
可以看出上面的图片中 使用AS关键字是十分有必要的,如果像是在下面的语句一样没有加逗号,系统会默认认为赋予了别名。
WHERE
条件表达式:对记录进行过滤,如果没有指定WHERE子句,则显示所有记录,在where表达式中,可以使用MySQL 支持的函数或运算符。
GROUP BY
查询结果分组:可以指代列名/位置
[GROUP BY{col_name | position} [ASC | DESC],…]
其中ASC为升序,DESC为降序。
HAVING(分组条件)
[HAVING where_condition]
聚合函数:max min 求最大值、最小值、平均值。。。因为它只有一个返回值
ORDER BY 对查询结果进行排序
[ORDER BY{col_name | expr | position}[ASC | DESC ],…]
LIMIT 限制查询结果返回的数量
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
这里的排序是从0开始
上面这个是关于INSERT …SELECT语句导入别的数据表当中,第一次报错是因为,在test数据表当中,有两列,所以值是不匹配的,需要指定特定的列。