欢迎光临
我们一起进阶

python数据库基础-MySQL(三)

扫码或搜索:沉默王二
发送 290992
即可立即永久解锁本站全部文章
MySQL 常用命令使用
MySQL 创建数据表

语法
CREATE TABLE table_name (column_name column_type);

创建一个student表

在aubrey账号下创建一个student表;类型INT ,NOT NULL不能为空 AUTO_INCREMENT对主键自动增加编号;name 32个字节,不能为空;age 不能为空; 注册日期不能为空;PRIMARY KEY(stu_id)将stu_id设置为主键,设置主键后就是唯一。
create table student(
stu_id INT NOT NULL AUTO_INCREMENT,
name CHAR(32) NOT NULL,
age INT NOT NULL,
register_date DATE,
PRIMARY KEY ( stu_id )
);

创建表项

查看已经有的表

通过insert into 插入了三次数据

三个同样的数据,但是id不同

我们这里指定id来插入数据,可以看到报错,保证了id的唯一性。

MySQL 增删改查

语法
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[OFFSET M ][LIMIT N]

查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0(偏移量就是偏移几个数据开始查询)。
你可以使用 LIMIT 属性来设定返回的记录数(显示多少条)。

  • limit & offset
    select * from student limit 2 offset 1;

    limit限制显示数量;offset偏移1,也就是从第2个开始显示。
  • WHERE
    > 语法
    SELECT field1, field2,…fieldN FROM table_name1, table_name2…
    [WHERE condition1 [AND [OR]] condition2…..

以下为操作符列表,可用于 WHERE 子句中。
下表中实例假定 A为10 B为20

mysql> select * from student where id > 3;

通过where来过滤查看id大于3的条目。

mysql> select * from student where age < 22;

mysql> select * from student where register_date = “2033-03-03”;

查看日期条目
– like

select * from student where register_date like “2033-03%”;

只查询3月份的条目

  • update

语法
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
1
update student set age=22 ,name=”Alex Li” where stu_id>3;

update student set name = “LiSi”,age = 10 where id=4;

修改id=4的条目

可以看到id 4的条目已经被修改。

mysql> update student set name=”Amy” where id >4;

  • delete

mysql> delete from student where name=”Amy”;

删除name 等于 Amy的条目

排序
  • order by
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
select *from student where name like binary "%Li" order by stu_id desc;
select * from student order by stu_id;

默认是升序

select * from student order by stu_id desc;

后面使用desc后,排序为降序。

update student set register_date=”2030-01-01″ where stu_id = 1;
update student set register_date=”2031-02-02″ where stu_id = 2;
update student set register_date=”2032-02-08″ where stu_id = 3;#修改一下时间

select * from student order by register_date;

select * from student order by register_date desc;

group by

insert into student (name,age,register_date) values(“LiSi”,22,”2014-03-21″);

新增加一条数据

select name,count(*) from student group by name;

使用group by来统计 name的信息。
可以看到统计了ZhangSan和LiSi的数量。

select name只是表示显示name的内容
group by name以name为一组数据进行统计

select name,count(*) as JiShu from student group by name;

将count(*)重命名为JiShu

select name,sum(age) from student group by name;

select name:显示的时候,显示name这一列的信息。

sum(age)和group by name:以相同name为一组进行对age进行综合计算,如:把相同name(ZhangSan)的age数字进行综合统计。

select name,sum(age) from student group by name with rollup;

统计所有组的总数; 所有组的名字默认为NULL

select coalesce(name,”Total Age”), sum(age) from student group by name with rollup;


使用coalesce来修改NULL的名称

#MySQL ALTER
MySQL ALTER用于修改表本身

add

alter table student add money int(11);#alter table表示要修改哪个表,这里修改student表。#add表示增加字段,这里增加一个叫money的字段,类型为int,括号里的11表示11个字节。

可以看到新增加的字段数据默认为空。

insert into student (name,age,register_date,money) values(“WangEr”,67,”2018-9-9″,999);

插入一条新数据

drop

alter table student drop age;#删掉age字段及所有内容

已经看不到删除的age字段及内容了

desc student;
可以看到默认如果不设置,那么money的null为YES,也就是可以为空。

alter table student drop money;
alter table student add money int(11) not null;#我们删掉money字段,然然后在重新增加money字段,然后设定为not null

当前Null为NO

modify

alter table student modify money int(123) null;
修改null为YES(修改字段的类型)

alter table student modify money int(123) not null;
在修改回为 not null

change

alter table student change money new_money char(32) not null default “X”;#将money改成新名字new_money;#类型改为char(32),not null#默认值为X

名字已被修改

类型为char(32),默认值为X

alter table student change stu_id id int(11) not null ;
修改主键的名称,从stu_id修改为id

#外键

CREATE TABLE `study_record` (
  `id` int(11) NOT NULL,
  `day` int NOT NULL,
  `status` char(32) NOT NULL,
  `stu_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_student_key` (`stu_id`),
  CONSTRAINT `fk_student_key` FOREIGN KEY (`stu_id`) REFERENCES `student` (`id`)
)
;
#  `stu_id` int(11) NOT NULL 这里定义的是外键
#KEY `fk_student_key` (`stu_id`):是定义一个外键的名称为fk_student_key,关联外键stu_id
#CONSTRAINT `fk_student_key`:使用名为fk_student_key的外键,外键stu_id关联student表中的id值(主键)

查看study_record的表结构;
MUL就表示外键

删掉student表多余数据

更新id2的数据

alter table study_record modify id int auto_increment;#创建study_record表时,没有设置为自动自增 id数。这里修改为自动自增。

这里新插入数据,如果不设置id自动自增的话,这里就无法成功插入数据,因为id没有定义(也就是没有自动新增)

因为外键stu_id关联了student表中的id,所以这里对应stu_id的id 值实际写的是student表中的id

可以看到成功插入数据并关联外键

这里stu_id关联的是5,但是在student表中并没有id 5,所以会报错。

study_record这个有外键的表,也是可以通过delete来删除数据的。
study_record引用了student表,所以只删除study_record的数据是没问题的,但是反过来删除student的数据是不可以的,因为student的数据被关联引用了 ,删除的话会影响study_record。

删除student表中的数据时就报错了,因为被引用了。

赞(0) 打赏
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小白学堂,学的不止是技术,更是前程

关于我们免责声明

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏