0720-MySQL(1)
1. 数据库是什么?
数据库是一种存储数据的仓库
就像车库,水库,钱库等.....存储数据的仓库,就叫数据库
目前主流的数据库有好几种,比如Oracle,MySQL,SQL Server等等
有的数据库是要收费的,不会开源,但是这次学的MySQL是开源的,免费的,以及跨平台的
# SQL Server 是微软开发的,他既不开源也不跨平台,垃
这次我们学的数据库是关系型数据库,开源免费跨平台,与隔壁形成鲜明对比
数据库:DB(DataBase),用来管理数据的服务软件:DBMS(DataBase Management System)
数据库系统:DBS(DataBase System),带有数据库并整合了数据库管理软件的系统
MySQL适用于中小型规模的,主流多种编程语言,以及Unix,Linux,Windows等多种操作语言
=utf
sql语句:
创建一个名字为PythonTest01,编码格式为utf-8的数据库
create database PythonTest01 charset=utf8;
显示所有数据库
show databases;
显示创建数据库的流程(我也看不懂,也不知道有啥用)
show create database PythonTest01; --这个不用加charset=utf8,不然就报错
删除数据库
drop database PythonTest01;
--如果你不创建数据库,是无法直接新建表的
查询当前使用的数据库
select database();
使用PythonTest01数据库
use PythonTest01;
查看当前数据库所有的表
show tables;
创建一个新数据表 名称为xxxxx 有两个字段,第一个为int类型的id,第二个为varchar(30长度)的name
create table xxxxx (id int, name varcahr(30))
查看xxxxx数据表的结构
desc xxxxx;
怎么对新创建的数据表字段约束?字段 类型 约束(不限顺序)
create table yyyyy(id int primary key not null auto_increment, name varchar(30));
这东西很长,所以可以换行
create table zzzzz(
id int primary key not null auto_increment,
name varchar(30)
);
创建一个students数据表
create table students(
id int unsigned primary key not null auto_increment, -- unsigned是表示无符号类型,也就是正数
name varchar(30),
age tinyint unsigned default 0, --默认为0
high decimal(5,2), --小数类型(decimal),表示一共五位,有两位小数
gender enum("男","女","武装直升机","我不到阿") default "我不到阿", --枚举类型,一共四种性别,默认我不到啊(
cls_id int unsigned --最后一个记住不要加逗号
);
插入一个数据
insert into students values(0, "老登", 18, 188.88, "男", 0);
在students里面添加新的字段[字段 类型]
alter table students add birthday datetime;
重命名字段[原名 新名 类型与约束]
alter table students change birthday birth datetime not null
修改字段:
alter table students modify birth date not null;
删除字段:
alter table students drop birthday;
删除表:
drop table students;
数据的增删改查(surd)
增[自增的那位置填null 0 或者default都表示让他自个填]:
insert into students values(0, "fw刀", 40, 170.65,"我不到阿", 1, "2016-1-1");
以及枚举类型,如果填别的会报错,但是能写1,2,3,4,就是写他的下标,只不过跟列表不一样的是这个从1开始
还有就是如果你只想写一部分,可以在values前面写(),里面写你要塞的东西,但是顺序必须一样,而且规定了不能为null也没有默认值的你必须写
而且这样写后面如果写多个括号,可以一次插入多个,比如:
insert into students (name, gender) values("fw刀","我不到阿") ("虎子","男");
(实际上,全部的也可以这样,就是前面那个括号不写,后面写完还能多几个括号多写
改[update 表名]:
update students set gender=1;
这句意思是把全部都改成男(
如果把指定的改的话,后面加个where,后面接条件就行,他会把所有符合条件的都改掉
所以如果你要改指定人的话,最好用id,因为你也不知道谁会重名
MySQL的查找语句和py差不多,比如我从student里面找
select * from student where age < 18 and gender = 2;
这里就是说从student里把所有age小于18的和性别为2(女)的学生拿出来
如果* 改成 name就是只拿名字,加啥给啥,*就是全部
以及在py里表达等于是==,但是这里就是=就行了
and or 都一样用
但是not的加在哪个前面就只对哪个生效
select name from student where not age <= 18 and gender = 1
查询的时候 name改成 name as 姓名 可以把打印出来的结果改为as后面的东西,记得加逗号
而且你要查俩的话顺序也跟着你的来
这里的意思就是把所有 年龄【不】小于等于18的学生 和 性别为1(男)的学生名字拿出来
相当于 select name from student where (not age <= 18) and gender = 1;
# 是的,这里面也是括号可以提高优先级,跟py一样
如果你想把所有 不 年龄小于18和性别为1 的名字拿出来的话,就这样写: not (age <= 18 and gender = 1);
还有个删除(忘了他罢):
delete from students; 清 空 数 据 表
真正用的时候加条件
delete from students where name="fw刀"
以及你把这个删了之后主键的id不是自增长的吗,他还是会继续沿着之前的涨,但是你可以自己指定
但是主键不允许重复,他要是接到之前已有的了,那就必挂无疑
这个是物理删除
一般最好逻辑删除,数据来之不易,不要删掉!
alter table students add is_delete bit default 0;
添加个新字段,bit类型,默认值0,名字为is_delete(bit类型二进制,要么0要么1)
要是要删除,就改成1