Mysql数据库的基本配置
登陆
mysql -uroot -p ↓
提示输入密码,直接点击回车 select user(); 就显示用户信息
注意net start是在管理员运行下才会有效的。
修改密码
先退出mysql,管理员身份运行cmd,尽管在输入命令的过程中出现了警告,但是登陆验证会发现已经修改成功。
密码破解
当你忘记密码时候,千万不要卸载重新安装,只需跳过授权库。
不是在ODBC下修改,而是要在用户root 下修改
统一字符编码
\s 查看编码
在mysql的解压目录下新建my.ini文件,在文件中如下设置:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
重启服务,查看编码,就会得到想要的编码格式。
操作文件夹---库操作
系统数据库
information_schema: 虚拟库,不占用磁盘空间,存储的是数据库 启动后的一些参数,如 用户表信息、列信息、权限信息、字符信 息等
performance_schema: MySQL 5.5开始新增一个数据库:主要用于 收集数据库服务器性能参数,记录处理查询请求时发生的各种事 件、锁等现象
mysql: 授权库,主要存储系统用户的权限信息
test: MySQL数据库系统自动创建的测试数据库
创建数据库
CREATE DATABASE 数据库名 charset utf8;
数据库命名规则和python变量命名规则一致。
数据库操作
查看数据库
show databases;
show create database db1;
select database();查看当前数据库
选择数据库
USE 数据库名
删除数据库
DROP DATABASE 数据库名;
修改数据库
alter database db1 charset utf8;
操作文件---表操作
存储引擎
数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
查看mysql支持的存储引擎
MariaDB [(none)]> show engines\G #查看所有支持的存储引擎
MariaDB [(none)]> show variables like 'storage_engine%';
# 查看正在使用的存储引擎
首先选择好数据库,然后进行表操作。
use 数据库名; ---实现切换数据库
select database();查看当前所在的数据库
创建表
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的
创建完成后,可以用show tables;查看所有的表名 可以用desc 表名;查看表结构
可以用 select * from 表名;查看表内容
插入数据
- insert into 表名 values (依次写上对应字段的数据)[,(依次写上对应字段的数据)...];
- insert into 表名(字段名1[,字段名2]) values (依照前边括号格式写) [,(依照前边括号格式)];
以上两种方式都可以插入单条或多条数据,但是以第一种方式插入要按照字段顺序插入数据,而已第二种方式插入数据要按照表名后面的格式,不一定包含全部字段,不包含的字段会被设置为空。
修改
修改表结构
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
3. 删除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
修改表内容---修改数据
复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;
只复制表结构
mysql> select * from service where 1=2; //条件为假,查不到任何记录
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> create table t4 like employees;
删除表
drop table 表名;
not null default
sex enum('male','female') not null default 'male'
这样就设置了sex属性是'male''female'其中之一,如果在插入数据的时候没有指定sex,那么默认为'male'。
unique key 唯一约束
顾名思义,唯一约束,为了保证唯一性,那么就不能重复。
单列唯一
方式一:
create table dept(
id int,
name char(10) unique
);
方式二:
create table dept(
id int,
name char(10)
unique(name)
);
联合唯一
create table service(
id int,
ip char(15),
port int,
unique(ip,port)
);
ip不是唯一的,端口也不是唯一的,但是ip和端口合起来保证唯一的一个主机上的软件是唯一的。
Primary key 主键约束
主键约束:不为空且唯一
单列主键
create table dept(
id int primary key,
name char(10)
);
复合主键
create table service(
ip char(15),
port int,
primary key(ip,port)
);
自增约束
一般表都会有一个编号id,要把id设置成自增就在创建表的时候这样设置:
id int primary key auto_increment
需要注意的是,在表创建成功之后可以插入数据的时候不带id,这样id会自动排序,而且不能重复,可是如果id设置为一个表中数据没有达到的id号,这是没有错误的,但是以后的插入就会在此基础上继续往上增。当要删除表内容的时候,如果用delete from 表名;那么只能删除内容,id号依然保存着,下次插入的时候还是在此基础上增长。所以用truncate 表名;才会达到我们想要的效果。
Foreign key---建立表之间的关系
先建立被关联的表并且保证被关联字段的唯一性。
create table dept(
id int primary key,
name char(10),
comment char(50)
);
create table emp(
id int primary key,
name char(10),
sex enum('male','female'),
dept_id int,
foreign key(dept_id) reference dept(id) on delete cascade on update cascade
);
foreign key(dept_id) reference dept(id) 设置外键约束,本表中的dept_id 是参考的dept表中的id创建的。
on delete cascade on update cascade 删除更新同步
但是不建议在项目中设置外键,只需要在逻辑上实现表之间的关联,而在代码中实现一些操作。