文件夹可以保存数据,但数据量庞大时,读写不易,不易扩展。有这样一种程序,可以帮助我们很快的取出某个文件群里的某些文件,并进行增删改查。这个程序就是数据库客户端,它访问服务器,然后获取其后的文件,也就是数据库。
一种特殊的文件。存储在硬盘上,不因关机而造成数据丢失。有自己的写法和读法。
直接访问数据库,会得到一堆看不懂的代码。为了知道如果改动读取里面的数据,要用到RDBMS。
RDBMS(关系型数据库管理系统)是一种程序。基于C/S架构。
- B/S架构,即浏览器服务器架构.通过http来传输数据。
- C/S架构,即客户端服务器架构,通过SQL语句传输数据。
MySQL官方下载
cmd中
- create database 数据库名;
(新建一个数据库)
mysqld --console --skip-grant-tables --shared-memory
mysql -u用户名 -p密码
使用反引号(tab键上方的那个键)将表名扩起来,表头也要哦
新版本MySQL连接不了,原因是身份验证插件更新了,需要在cmd中(左侧的诸如cmd是标示位置的,不要复制)
- C:\user>mysql -u用户名 -p密码
- mysql>use mysql;
(上面打开名为mysql的数据库)- mysql>select user,host,plugin,authentication_string from user;
(上面查询身份验证插件)- mysql>alter user ‘用户名’@’%’ identified with mysql_native_password by ‘密码’;
(上面改回老版身份验证插件)- mysql>select user,host,plugin,authentication_string from user;
(再次查询,发现已经修改成功)
任何有试用期的东西,都一定在本地有一个记录开始时间的文件。只要删了它,就可以无限试用了。
- Win+R输入regedit
- 到HKEY_CURRENT_USER\Software\PremiumSof 删除Data。
- 然后到HKEY_CURRENT_USER\Software\ Classes\CLSID目录下。可以看到有许多子目录。点开这些子目录,如果某个子目录下,只含有一个info文件夹,就将这个子目录删除,直到删完所有这样的子目录。
- 然后,恩。试用时间就重置了。
接下来双击链接的那个数据库,直到其变绿。如果它不变绿,说明mysql是关闭状态。
Win+R输入services.msc找到mysql,启动即可
+表示添加一行。
√表示保存(写完数据之后都要点这个,才能真正地保存下来)
要做一个数据表时,考虑两方面,一、每一个字段的类型是什么。二、其它的约束是什么。比如:主键列的类型是int,约束是不能重复,不能为零之类的.无符号范围的意思是,不带负号。
整数:int,bit
小数:decimal
字符串:varchar,char,text
日期时间:date,time,datetime
枚举类型(enum)–>python里没有枚举类型。
- decimal(7,3)表示共存7位数,小数占3位。
- char(3)固定长度为3,如果不足三位,在后面用空格补齐。
- varchar(3)可变长度为3,不足不会补齐。
- text表示存储大文本,当字符大于4000时推荐使用
- 对于二进制文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径。
- 更多数据类型:点击这里
- 主键primary key:物理上存储的顺序
- 非空not null:此字段不允许填写空值
- 唯一unique:此字段的值不允许重复
- 默认default:当不填写此值时会使用默认值,填写时一填写为准
- 外键foreign key:另一个关联表的主键
(说明:外键约束可以保证数据有效性,但是在进行数据的curd(增删改查)时,都会降低数据库的性能,不推荐使用。可以在逻辑层进行控制以保证数据的有效性。)
下面操作都在cmd中: 最前面有思维导图,不必担心记忆问题。
如果报错,可以试试在表名、数据库名两侧加反引号,特别是这些名字中有特殊字符的时候。
mysql -u用户名 -p密码
注意: 语句敲enter换行不影响。记得保证语句完整即可。大小写不影响。
select now();
select version();
-- 注释不会被运行,记得在注释内容间加空格
注意: 可以用上下键翻着选择哦
create database 数据库名;
show create database 数据库名;
创建一个数据库时,如果不指定编码,那么默认是拉丁文
create database 数据库名 charset=utf8;
查看创建数据库的sql语句,后面直接用数据库名即可,不能带charset=utf8之类的
drop database 数据库名;
ues 数据库名;
看到database changed就成功了
即使转到了这个数据库,也可以用use直接跳到别的数据库
6. 查看当前使用的数据库
select database();
show tables;
create table 数据表名(字段1 类型1 约束1,字段2 类型2 约束2);
例如: create table hero(id int,name varchar(4));
Type表示类型,其它几个都为约束。分别为:是否为空?是否为主键?有默认值吗?有额外的吗?
create table 数据表名(id int unsigned primary key not null auto_increment,name varchar(5));
给id的条件依次是 数字(这里设置为无符号,是约束的属性,必须得紧跟这个约束的后面),主键,非空,自动增长填充。顺序可以调换哦。
太长了可以换行,最后一个千万不能加逗号
create table 数据表名(
id int unsigned not null auto_increment primary key,
name varchar(5),
age TinyInt unsigned default 0,
height decimal(5,2),
cls_id int unsigned
);
关于默认的语法注意一下即可
insert into 数据表名 values(0,“老张”,18,188.88,0);
select * from 数据表名;
--删库
drop database 数据库名;
--删表
drop table 数据表名;
6.查看表的创建语句(python中就用这个哦,中间红圈)
show create table 数据表名;
注意:
ENGINE=InnoDB表示引擎是innoDB,它支持事务处理、外键和行级锁(一个用户操作行时,另一个用户不能操作这行)。还有一个常见的引擎是MylSAM,它性能更好。
AUTO_INCREMENT=2,自动增长的默认值,表示添加下一行数据,主键为2。
DEFAULT CHARSET=utf8mb4,默认编码是utf8mb4。这个是从数据库继承来的。utf8mb4是支持中文和emoji的(MySQL中的utf8是阉割版,只能显示3字节。而utf8mb4其实是完全版的utf8。)。
create创建
update更新
Retrieve读取
delete删除
insert into 数据表名 values(记录);
--主键列除了填0,还可以填null,default。都可以让其自动填列。
--若某键是枚举类型,可以直接用数字进行插入等修改(从1开始)。
insert into 数据表名 (字段i,字段j…) values (对应的记录);
--没写的会显示默认值。不许为空的列必须插入。
insert into 数据表名(字段i,字段j…) values (对应的记录1),
(对应的记录2), (对应的记录3)…;
update 数据表名 set 字段名=字段值;
--找到字段名1=值名1的那一条数据,并修改字段2的值为
--那个字段名1,最好为主键,这样可以起到唯一修改的效果
update 数据表名 set 字段名2=字段值2 where 字段名1=值名1;
! ! ! 我们称where 字段名1=值名1叫定位条件。不只是=哦,定位条件也可以用>或<等来,用的是布尔值。
--定位条件只能一个,老师我试过了。
update 数据表名 set 字段名1=字段值1,字段名1=字段值2 定位条件;
select * from 数据表名;
--添加一个字段,根据字段里面的值来判断,有没有删除。
alter table 数据表名 add is_delete bit default 0;
为什么is_delete字段没东西?因为起码要一个字节我们才看得到,而这里只有一个bit。但是该怎么用还怎么用,定位条件为is_delete=0
update 数据表名 set is_delete=1 定位条件;