python学习笔记12-mysql、orm

一、mysql基本操作

  安装、改密码、授权等略

  1、创建数据库

  语法:CREATE DATABASE [DATABASENAME] CHARSET='utf8';

mysql> CREATE DATABASE testdb charset='utf8';
Query OK, 1 row affected (0.00 sec)

 

  2、创建表

  语法:CREATE TABLE [TABLENAME] (column1 TYPE(LENGTH) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] [PRIMARY KEY],column2 TYPE(LENGTH)...);

  字段数据类型:TYPE

 

 

   NOT NULL:设置该字段是否可以为空

   DEFAULT value:设置默认值

  AUTO_INCREMENT:设置自增

  PRIMARY KEY:设置是否为主键

mysql> create table test1 ( id int not null auto_increment primary key, name char(32) not null, status char(32) not null default "yes");
Query OK, 0 rows affected (0.02 sec)

 

  3、数据增删改查

  增:

  语法:INSERT INTO [TABLENAME](column1,column2,...,columnn) VALUES(value1,value2,...,valuen);

mysql> insert into test1(name,status) values("张三","NO");

Query OK, 1 row affected (0.01 sec)

 

  删:

  语法:DELETE FROM [TABLENAME] [WHERE CONDITION]

mysql> DELETE FROM test1 where name="张三";
Query OK, 1 row affected (0.01 sec)

 

  查:

  语法:SELECT * FROM TABLENAME [WHERE CONDITION];

       SELECT column1,column2,...,column FROM TABLENAME [WHERE CONDITION];

mysql> select * from test1;
+----+--------+--------+
| id | name   | status |
+----+--------+--------+
|  2 | 李四   | NO     |
|  3 | 王五   | NO     |
+----+--------+--------+
2 rows in set (0.00 sec)

mysql> select * from test1 where name="李四";
+----+--------+--------+
| id | name   | status |
+----+--------+--------+
|  2 | 李四   | NO     |
+----+--------+--------+
1 row in set (0.01 sec)

  改:

  语法:UPDATE TABLENAME SET column="value" [WHERE CONDITION];

mysql> update test1 set status="YES" where name="李四";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test1;
+----+--------+--------+
| id | name   | status |
+----+--------+--------+
|  2 | 李四   | YES    |
|  3 | 王五   | NO     |
+----+--------+--------+
2 rows in set (0.00 sec)

  4、数据库、表的增删改查

  查数据库:

  语法:SHOW DATABASES;

  查数据库中的表:

  语法:SHOW TABLES;

  查表结构:

  语法:DESC TABLENAME;

  查建表语句:

  语法:SHOW CREATE TABLE TABLENAME;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| testdb             |
+--------------------+
4 rows in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| test1            |
+------------------+
1 row in set (0.00 sec)

mysql> use testdb
Database changed
mysql> show create table test1\G
*************************** 1. row ***************************
       Table: test1
Create Table: CREATE TABLE `test1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(32) NOT NULL,
  `status` char(32) NOT NULL DEFAULT 'yes',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

  改表字段类型:

  语法:ALTER TABLE TABLENAME MODIFY column TYPE(LENGTH);

  改表字段名称:

  语法:ALTER TABLE TABLENAME CHANGE oldcolumn newcolumn TYPE(LENGTH);

  改表名:

  语法:ALTER TABLE TABLENAME RENAME TO NEWNAME;

mysql> ALTER TABLE test1 MODIFY name char(64);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> desc test1;
+--------+----------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra          |
+--------+----------+------+-----+---------+----------------+
| id     | int(11)  | NO   | PRI | NULL    | auto_increment |
| name   | char(64) | YES  |     | NULL    |                |
| status | char(32) | NO   |     | yes     |                |
+--------+----------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE test1 CHANGE status STATUS char(32);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> DESC test1;
+--------+----------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra          |
+--------+----------+------+-----+---------+----------------+
| id     | int(11)  | NO   | PRI | NULL    | auto_increment |
| name   | char(64) | YES  |     | NULL    |                |
| STATUS | char(32) | YES  |     | NULL    |                |
+--------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE test1 RENAME TO TEST2;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| TEST2            |
+------------------+
1 row in set (0.00 sec)

 

  增加一个字段:

  语法:ALTER TABLE TABLENAME ADD newcolumn TYPE(LENGTH),[NOT NULL] [DEFAULT]...

mysql> ALTER TABLE TEST2 ADD addr char(64) NOT NULL;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> DESC TEST2;
+--------+----------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra          |
+--------+----------+------+-----+---------+----------------+
| id     | int(11)  | NO   | PRI | NULL    | auto_increment |
| name   | char(64) | YES  |     | NULL    |                |
| STATUS | char(32) | YES  |     | NULL    |                |
| addr   | char(64) | NO   |     | NULL    |                |
+--------+----------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

 

  删除一个字段:

  语法:ALTER TABLE TABLENAME DROP column;

  删除一张表:

  语法:DROP TABLE TABLENAME;

  删除一个数据库:

  语法:DROP DATABASE DATABASENAME;

mysql> DESC TEST2;
+--------+----------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra          |
+--------+----------+------+-----+---------+----------------+
| id     | int(11)  | NO   | PRI | NULL    | auto_increment |
| name   | char(32) | NO   |     | NULL    |                |
| status | char(32) | NO   |     | yes     |                |
| addr   | char(64) | NO   |     | NULL    |                |
+--------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE TEST2 DROP addr;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> DESC TEST2;
+--------+----------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra          |
+--------+----------+------+-----+---------+----------------+
| id     | int(11)  | NO   | PRI | NULL    | auto_increment |
| name   | char(32) | NO   |     | NULL    |                |
| status | char(32) | NO   |     | yes     |                |
+--------+----------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> DROP TABLE TEST2;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES;
Empty set (0.01 sec)

mysql> DROP DATABASE testdb;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

 

  5、排序和分组

  排序语法:SELECT * FROM TABLENAME ORDER BY column [ASC|DESC];

  ASC:降序排列

  DESC:升序排列

mysql> select * from test1;
+----+--------+------+--------+
| id | name   | addr | status |
+----+--------+------+--------+
|  1 | 张三   | bj   | YES    |
|  2 | 李四   | sh   | YES    |
|  3 | 李四   | bj   | NO     |
+----+--------+------+--------+
3 rows in set (0.00 sec)

mysql> select * from test1 order by name;
+----+--------+------+--------+
| id | name   | addr | status |
+----+--------+------+--------+
|  1 | 张三   | bj   | YES    |
|  2 | 李四   | sh   | YES    |
|  3 | 李四   | bj   | NO     |
+----+--------+------+--------+
3 rows in set (0.00 sec)

mysql> select * from test1 order by name asc;
+----+--------+------+--------+
| id | name   | addr | status |
+----+--------+------+--------+
|  1 | 张三   | bj   | YES    |
|  2 | 李四   | sh   | YES    |
|  3 | 李四   | bj   | NO     |
+----+--------+------+--------+
3 rows in set (0.00 sec)

mysql> select * from test1 order by name desc;
+----+--------+------+--------+
| id | name   | addr | status |
+----+--------+------+--------+
|  2 | 李四   | sh   | YES    |
|  3 | 李四   | bj   | NO     |
|  1 | 张三   | bj   | YES    |
+----+--------+------+--------+
3 rows in set (0.00 sec)

 

  分组统计:

  语法:SELECT column,func() FROM TABLENAME GROUP BY column;

     SELECT column,func() as RESULTNAME FROM TABLENAME GROUP BY column WITH ROLLUP;

       SELECT coalesce(column,RESULTNAME),func() FROM TABLENAME GROUP BY column WITH ROLLUP;

mysql> select * from test1;
+----+--------+------+--------+
| id | name   | addr | status |
+----+--------+------+--------+
|  1 | 张三   | bj   | YES    |
|  2 | 李四   | sh   | YES    |
|  3 | 李四   | bj   | NO     |
+----+--------+------+--------+
3 rows in set (0.00 sec)

mysql> select name,count(*) from test1 group by name;
+--------+----------+
| name   | count(*) |
+--------+----------+
| 张三   |        1 |
| 李四   |        2 |
+--------+----------+
2 rows in set (0.00 sec)

mysql> select name,count(*) as "数量" from test1 group by name with rollup;
+--------+--------+
| name   | 数量   |
+--------+--------+
| 张三   |      1 |
| 李四   |      2 |
| NULL   |      3 |
+--------+--------+
3 rows in set (0.00 sec)

mysql> select coalesce(name,"总数"),count(*) as "数量" from test1 group by name with rollup;
+-------------------------+--------+
| coalesce(name,"总数")   | 数量   |
+-------------------------+--------+
| 张三                    |      1 |
| 李四                    |      2 |
| 总数                    |      3 |
+-------------------------+--------+
3 rows in set (0.00 sec)

  未完待续

 

posted @ 2016-10-28 11:26  没有手艺的手艺人  阅读(131)  评论(0编辑  收藏  举报