数据库有点意思
hi
今天没什么想头,直接数据库搞起。看了看课程,入门这个就打算7天搞定好了,毕竟还是在教研室干活的人。。。
1、MySQL
---添加约束---
--mysql> ALTER TABLE users2 ADD PRIMARY KEY (id);
--mysql> ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCES province (id);
--设置默认值mysql> ALTER TABLE users2 ALTER age SET DEFAULT 15;
删除默认值mysql> ALTER TABLE users2 ALTER age DROP DEFAULT;
--删除主键,由于每张表只有一个主键,所以mysql> ALTER TABLE users2 DROP PRIMARY KEY;
--删除唯一约束,由于唯一约束在一张表中可能有很多个,所以要先查名字mysql> SHOW INDEXES FROM users2\G;即那个Key_name
mysql> ALTER TABLE users2 DROP INDEX username;
注意这里删除的是约束
--删除外键约束,也是要先查看名字
mysql> SHOW CREATE TABLE users2;
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| users2 | CREATE TABLE `users2` (
`username` varchar(10) NOT NULL,
`pid` smallint(5) unsigned DEFAULT NULL,
`id` smallint(5) unsigned NOT NULL DEFAULT '0',
`age` tinyint(3) unsigned NOT NULL,
UNIQUE KEY `pid` (`pid`),
CONSTRAINT `users2_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `province` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
这里找到CONSTRAINT后面的名称,然后
mysql> ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;
这里删除的是外键约束,但索引还在,要删除索引需要上面的命令DROP INDEX
---修改数据表---
--修改列定义(数据类型,位置等)
mysql> ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;
注意这里id的定义虽然不变,但是还是要输入一遍;要是要修改定义,也要输入相对应的;而且修改列定义一定要小心,尤其是数据库中数据很多很杂的时候。
--修改列名称
mysql> ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;
change的能力要大,输入也要多一点
--修改数据表名字
mysql> ALTER TABLE users2 RENAME users3;
mysql> RENAME TABLE users3 TO users2;
两种方法,其中第二种方法可以对多个表进行修改
------再次强调,尽量不要修改表名或者库名,危险,必须谨慎。-------
---小结---
--约束
-5种约束或表级和列级
--修改数据表
-对字段:添加删除修改定义和名称
-对约束:添加删除
-对数据表:更名
2、PHP-正则表达式
---边界控制与模式单元---
--^匹配字符串开始的位置-限制要匹配的字段必须以什么开头
-比如^d必须以d开头,然后前面连空格都不能有
--$。。。。。。结束
--模式单元()
把()内的东西当作一个原子看待,()中是一个正则表达式
----基本语法到此结束,知识点多而散,要灵活运用----
---懒惰匹配与贪婪匹配---
--修正模式-修正匹配出现歧义的情况
--贪婪匹配在歧义时选长的,匹配相反
--有歧义时,默认贪婪
<?php
/*
* Description:PHP 正则表达式函数
*
* @name:show
* @description:output debug
* @param $var:input data
* @return void
*
*/
//产生歧义
$pattern='/imooc.+123/'; //匹配imooc任意个任意多个字符并以123结尾
$subject='I love imooc__123123123123123';
$matches=array();
preg_match($pattern,$subject,$matches);
show($matches);
function show($var=null){
if(empty($var)){
echo 'null';
}elseif(is_array($var)||is_object($var)){
//array,object
echo '<pre>';
print_r($var);
echo '</pre>';
}else{
//string,int,float...
echo $var;
}
}
结果是
Array ( [0] => imooc__123123123123123 )
--修改为懒惰模式:$pattern='/imooc.+123/U';
Array ( [0] => imooc__123 )
---常见的修正模式---
--U,懒惰匹配 $pattern='/imooc.+123/U';
--i,忽略大小写 $pattern='/iMooc.+123/Ui'; //这里用了两种修正模式,也是可以的
--x,忽略空白 $pattern='/iMo o c.+123/Uxi';
--s,让‘.'匹配除换行符以外的所有字符
--注意,修正模式是指对匹配结构进行修正,对象是正则表达式,一定不是匹配对象
-------------实战应用-------------
---常用情况---
--需求~正则表达式的行为的口头描述~正则表达式
--非空~原子出现的次数1次到无穷大次~.+ //.一般代表任意原子,+代表任意多个,应用场景就是必填项的提示等
--浮点数(例子是两位小数的浮点数)~数字连续出现1到无穷大次,点号后面有两位数字~\d+\.\d{2}$ //\d数字匹配,\.转义.,\d{2}两位数字i,{}实现量词,$必须以两位数字结尾(和之前的描述相吻合)。应用场景是款项之类的验证
----------------复习------------------
筛选
| 匹配两个或多个,即或者
[] 匹配括号内任意一个原子,特殊[1-3],这里的-是“到”的意思
[^] 同上互逆,匹配除括号内的所有原子
注意:用^要小心,会匹配所有其他的,包括空格等不可见原子;再有就是^要和其他原子紧贴顶头写
-定义原子的集合
. 等价于[^\n],匹配除换行符之外的任意字符——基本上就是所有的
\d [0-9]匹配一个十进制数字
\D [^0-9]匹配一个非十进制数字
\w [0-9a-zA-Z]匹配一个数字、字母或下划线
\W [^0-9a-zA-Z]匹配一个非数字、字母或下划线
\s 匹配一个不可见原子
\S 匹配一个可见原子
--量词
-表示某个原子连续出现多少次
-{n} 表示其前面的原子恰好连续出现n次——5{3}
-{n,} 表示其前面的原子至少连续出现n次
-{n,m} [f|5]{3,6}表示连续出现n次,最多m次,就是n到m次
-* 任意次,只要连续,都匹配,{0,}
-? {0,1}0到1次
-+ {1,}至少有1次
-------------------复习结束------------------------
--手机号匹配~数字,11位,以数字结尾,以数字1开头~^1[34578]\d{9}$或者^1(3|4|5|7|8)\d{9}$
--email地址匹配~英文或者数字,位数不限,有@,有.,并以非数字结尾~^\w+@\w+(\.\w+)+$ //注意()的妙用,即自定义原子(块),把可能重复出现的一些原子集合的写
--URL地址匹配~字母开头(非数字),://,然后是数字,字母.之类的~^(https?://)?(\w+\.)+[a-zA-Z]+ //这里仅仅是匹配到了一般情况