【MySql】使用记录<五>

来源:转载


日期型

Year 年(1字节) 95/1995, [1901-2155],在insert时,可以简写年的后2位,但是不推荐这样.[00-69] +2000[70-99] + 1900, 即: 填2位,表示 1970 - 2069Date 日期 1998-12-31范围: 1000/01/01 ,9999/12/31Time 时间 13:56:23范围: -838:59:59 -->838:59:59datetime 时期时间 1998-12-31 13:56:23范围: 1000/01//01 00:00:00 ---> 9999:12:31 23:59:59

mysql> create table t(ya year,dt date,tm time,dm datetime);

mysql> select * from t;+------+------+------+------+| ya | dt | tm | dm |+------+------+------+------+| 1901 | NULL | NULL | NULL |+------+------+------+------+1 row in set (0.00 sec)

mysql> insert into t values(95,’2000-01-03’,’12:12:12’,’1112-02-03 12:12:12’);
Query OK, 1 row affected (0.06 sec)

mysql> select * from t;+------+------------+----------+---------------------+| ya | dt | tm | dm |+------+------------+----------+---------------------+| 1901 | NULL | NULL | NULL || 1995 | 2000-01-03 | 12:12:12 | NULL || 1995 | 2000-01-03 | 12:12:12 | 1112-02-03 12:12:12 |+------+------------+----------+---------------------+

timestamp 自动更新 时间戳

时间戳: 是1970-01-01 00:00:00 到当前的秒数. 一般存注册时间,商品发布时间等,并不是用datetime存储,而是用时间戳.因为datetime虽然直观,但计算不便.

列的默认值

  1. 避免列为NULL,使用NOT NULL default ”
  2. 值和value要前后对应;

主键与自增

  1. primary key能够区分每一行的,此列不重复;主键一定不重复,不重复的未必是主键;
  2. 与auto_increment通常一起出现,但是不是必须的;只有auto_increment是无法生成表格的;
  3. primarty key 和key都是可以的;
  4. id int primary key; // primarty key(id); 语法相同
  5. 自增浪费资源,在oracle中是没有的;

案例

  1. 所有列,都定长,可以极大提高查询速度.
主键 用户名 性别 体重(KG) 生日 工资 上次登陆 个人简介id Username gender weight birth salary Lastlogin intro列名称 列类型 默认值 是否主键Id Int unsigned PRIUsername Varchar(20) '' gender Char(1) /tinyint/enum(男/女) weight Tinyint unsigned Birth Date Salary Decimal(8,2) lastlogin Datetime intro Varchar(1500) 这张表不够好,可以优化分析:这张表除了username/intro列之外,每一列都是定长的.我们不妨让其所有列,都定长,可以极大提高查询速度.列名称 列类型 默认值 是否主键Id Int unsigned PRIUsername char(20) '' gender Char(1) /tinyint weight Tinyint unsigned Birth Date Salary Decimal(8,2) lastlogin Int unsigned Username char(10) 是会造成空间的浪费,但是提高的速度,值.Intro char(1500) 却浪费的太多了,另一方面,人的简介,一旦注册完,改的频率也并不高.我们可以把 intro列单独拿出来,另放一张表里.列名称 列类型 默认值 是否主键Id Int unsigned PRIUsername char(20) '' intro Varchar(1500) 在开发中,会员的信息优化往往是 把频繁用到的信息,优先考虑效率,存储到一张表中.不常用的信息和比较占据空间的信息,优先考虑空间占用,存储到辅表中.

如何导入外部.sql语句

mysql> source D:/Program Files/mys.sql;Query OK, 0 rows affected (0.41 sec)Query OK, 0 rows affected (0.40 sec)//注意:不要加引号;也可以:c:/windows>cd c:/akura/Db Scriptsc:/akura/Db Scripts>mysql -u root -p rootmysql>/. EXECUTER_NEW_USER.sqlhere EXECUTER_NEW_USER.sql my file name//使用./的方式导入,source属于linux中的语句

删除表

drop table命令用于删除数据表。drop table命令格式:drop table <表名>;例如,删除表名为 MyClass 的表: mysql> drop table MyClass;

更改表名

mysql> rename table t3 to t5;Query OK, 0 rows affected (0.21 sec)或者:mysql> alter table t5 rename to t3;Query OK, 0 rows affected (0.26 sec)

更改属性表

mysql> alter table t3 -> add height tinyint unsigned not null default 0;Query OK, 0 rows affected (0.78 sec)Records: 0 Duplicates: 0 Warnings: 0 //默认在表后 可以使用after更改列属性:mysql> alter table t3 change weight tizhong smallint;Query OK, 0 rows affected (0.62 sec)Records: 0 Duplicates: 0 Warnings: 0modify只能更改数据类型 不能更改列名mysql> alter table t3 modify tizhong int;Query OK, 0 rows affected (0.59 sec)Records: 0 Duplicates: 0 Warnings: 0

删除列

mysql> alter table t3 drop column height;Query OK, 0 rows affected (0.51 sec)Records: 0 Duplicates: 0 Warnings: 0

视图view
view被称为虚拟表,view是sql的查询结果。查view就相当于查sql语句表。
1.能够权限控制;【只允许某几个列给客户查询】
2.可以开放几列;
3.简化复杂的查询;
4.如何区分表和视图?【视图能不能更新和删除?视图存放到哪里?】
==>更改表必将影响视图的查询结果;
如果虚拟表和表完全是一对一的话,就会相互影响!反之无法更改视图表!【关键看能否映射回去】

mysql> create view vgood as select cat_id,goods_id,goods_name,(market_price-shop_price)as sheng from goods;Query OK, 0 rows affected (0.19 sec) //vgood为view的表名

视图algorithm

  1. 对于简单查询形成的view,再对view查询是【where,order by】等,可以把建视图的语句+查视图的语句==合并==>查物理表 ====>这种视图的算法叫merge(合并);
  2. 视图的语句比较复杂,很难再和查询语句合并,mysql可以先创建语句把结果集形成内存中的临时表,然后再查临时表====>这种视图的算法叫temptable



分享给朋友:
您可能感兴趣的文章:
随机阅读: